Re: Permission Denied trying to connect to localhost in unit test
Re: Permission Denied trying to connect to localhost in unit test
- Subject: Re: Permission Denied trying to connect to localhost in unit test
- From: Robert Walsh via Cocoa-dev <email@hidden>
- Date: Fri, 13 Dec 2019 17:35:50 +0000
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=envisionware.com; dmarc=pass action=none header.from=envisionware.com; dkim=pass header.d=envisionware.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=N+8kZ1f3pYnMXLt4RnT7ZGpt7MrOiOAgaMPpHPdpWZo=; b=CBcKekqjPSIdQgRwujPebt29c1Ojz9Qogxkr0I+eWLn/ncU+POJyvIYzh4svJpDl1A8CNmX0O6HusYnO8LDXT2fSXi2ab5IwaGPPbhjxgbVJLD6qaVYvJKw2b00F+2cXa2/RFDv1ugG8E8+52IomvRX8yWqrzEMhN5SHsn/WmplmcPDfHJ6ATDKcH0mrfV9E91SQjswmHE51g2IDTbFMSYhd8hUOfWyvQPB+GY8gutjAPJVvHX8HKBVZtlN4+sUcaVwzvYqsm6D/uKNKwt3NmNCRdXe0BdndZ/l4x7E0HSo8wf0MT3T9/TsCf5A6Y5fxBghJEpuDMxe0yT78dPlUdQ==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UWXEJeBf5fB1moJTf2HM9QgmlLEkWspapFX8Ob6NniIp/anXgDk8uYS/YV78LEWA4Pt/94r4vO4F+h7um0cNfk+Bzak5qpUFMjtYcoma1/JZJPGg/bUc7RJzDT8UwLi/nxV/SJYZsWTueSVnCNjDAoL6kaSsX3RNreZiI+My1QXfh2e9NfnlmH3w0P8B+sQyKuSlu6zW80hL+iu7D8DZjfuZWIBCvH8UacrDyCwsaAcOgOZwybrf9DRROk5EV5Oh2XBeTP9ZZ/kQwhmuOZmnhpljYmO4d5GiMl9IgoGpTJxYYUvJugBUt7nmZvvxIShY2icoQUXxQAHbnKUilNIIuQ==
- Thread-topic: Permission Denied trying to connect to localhost in unit test
Thanks - I just finished doing that. I stubbed out a simple main that has
enough smarts to use this TcpClient the way it will be used in the real app,
and I was able to connect to an instance of the server to which the command
line tool needs to connect. This server is running on another machine, not on
localhost. I was able to make this connection without needing to grant any
entitlements to the command line tool, so the problem occurs only when trying
to run the unit test. In short, the unit test case is allowed to start a
server and accept connections (from telnet, for example), and the class being
tested is allowed to connect to an external server when not being run within
the test case. So far, though, the class being tested cannot connect to the
server when both are used inside the test case.
I can probably move forward by testing this particular class the old fashioned
way through manual inspection and then mocking it in other classes where it
will be used.
If, though, I want to go the dummy test app route, would I create another
target that is a GUI app, either link to a static library containing the
testable classes or include them as compile targets, and then create a unit
test bundle that targets that GUI app?
Rob
________________________________
From: Keary Suska <email@hidden>
Sent: Friday, December 13, 2019 12:18 PM
To: Robert Walsh <email@hidden>
Cc: Cocoa-Dev (Apple) <email@hidden>
Subject: Re: Permission Denied trying to connect to localhost in unit test
I would first test to see if you can access networking at all—i.e. connect to a
public HTTP server and see if it works. If it doesn’t, then you are probably
running against the entitlements issue. I suspect that the “dummy target”
indicated is simply a GUI app wrapper built just for testing but not for
deployment. Should be easy enough because it doesn’t have to do anything in the
GUI.
Keary Suska
Esoteritech, Inc.
> On Dec 13, 2019, at 4:42 AM, Robert Walsh via Cocoa-dev
> <email@hidden> wrote:
>
> The errno is 13 (which I think is just a generic Permission Denied).
>
> I am connecting to localhost.
>
> I did find this post in the Apple Developer Forums
> (https://forums.developer.apple.com/thread/52211):
> How do I unittest a command line application? |Apple Developer
> Forums<https://forums.developer.apple.com/thread/52211>
> Yes, you can add the unit testing bundle, but it won't let you set Target to
> be Tested.. Right. That’s because the machinery to load your test bundle
> within a process only works if the process is based on a GUI framework (like
> Cocoa or Cocoa Touch).
> forums.developer.apple.com
>
>
> A command line tool typically does not use a GUI framework and thus the test
> machinery is unable to load your bundle into that tool.
>
> However, you can test without an app target. If you set the Target to be
> Tested popup to None, Xcode will load your test bundle into its built-in
> ‘test runner’ tool, xctest.
>
> This works well for most but there are some gotchas. Specifically, if the
> code you’re using requires entitlements then you won’t be able to test it
> like this because there’s no way to give those entitlements to xctest. The
> standard workaround for that is to add a dummy test target app to your
> project.
>
>
> Assuming the problem is that I need to add the App Sandbox -> Outgoing
> Connections (Client) entitlement to the command line target (since I can't
> add any entitlements to the test target; clicking "+ Capabilities" brings up
> a dialog saying that capabilities are not support for this target), how do I
> create "a dummy test target app?" As I said before, I created the test
> target by using the Unit Test Bundle template, and I don't see any other
> relevant choices.
>
>
> Rob
>
>
> ________________________________
> From: Jens Alfke <email@hidden>
> Sent: Thursday, December 12, 2019 1:58 PM
> To: Robert Walsh <email@hidden>
> Cc: Cocoa-Dev (Apple) <email@hidden>
> Subject: Re: Permission Denied trying to connect to localhost in unit test
>
>
>
> On Dec 12, 2019, at 7:42 AM, Robert Walsh via Cocoa-dev
> <email@hidden<mailto:email@hidden>> wrote:
>
> I am writing a command line application in Objective-C that needs to make a
> TCP connection to a server. In a unit test for the TcpClient class I am
> writing, I have a simple TCP server that listens for connections in a thread.
> When I try to connect to this socket from the client socket class, connect()
> fails and perror reports Permission Denied.
>
> That's odd. I've written plenty of macOS networking code and not seen this
> problem. What is the errno value?
>
> The only thing I can guess is that the Xcode test-runner process is being
> sandboxed to prevent outgoing networking, but I've definitely run TCP
> connections from XCTests without problems. Are you connecting to "localhost"
> / 127.0.0.1, or using an explicit IP address?
>
> —Jens
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden