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: Keary Suska via Cocoa-dev <email@hidden>
- Date: Fri, 13 Dec 2019 07:58:27 -1000
Yes, you would create a new test target and add all the GUI stuff as a member
of the test target. Of course, you will want to exclude them from other
targets. You shouldn’t need to do any library linking since it is a common
codebase. Simply include the classes and put the glue code in the App Delegate.
Keary Suska
Esoteritech, Inc.
> On Dec 13, 2019, at 7:35 AM, Robert Walsh via Cocoa-dev
> <email@hidden> wrote:
>
> 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
_______________________________________________
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