On 16 Mar 2014, at 12:38 am, Marcin Erdmann <marcin.erdm...@proxerd.pl> wrote:

> I have another question. One of test cases in the spec is Publish via 'sftp' 
> to ivy repository with multiple ivyPattern and artifactPattern configured - 
> what do we want to verify here?

I wouldn’t bother. Provided that we have test coverage that publishing with a 
single pattern works for every transport, then the multiple pattern case can be 
covered with a single transport.

> I've noticed that when publishing to such a repository the first ivy pattern 
> and artifact pattern are used. Should the test case assert that this happens?
> 
> 
> On Fri, Mar 14, 2014 at 8:22 PM, Marcin Erdmann <marcin.erdm...@proxerd.pl> 
> wrote:
> 
> 
> 
> On Fri, Mar 14, 2014 at 7:56 PM, Adam Murdoch <adam.murd...@gradleware.com> 
> wrote:
>> 
>> Yet, there is plenty to be done on error handling and making sure all 
>> resources are being released even in error scenarios - so the boring but 
>> important parts.
>> 
>> I have one question about error handling. There are three types of failures 
>> listed in the spec: invalid credentials, cannot connect to the server and 
>> everything else (called server exception). I think that we probably want to 
>> extract all permission related errors (when both resolving and uploading) as 
>> a separate error type so that the error message provides user an idea that 
>> the error is permission related as it feels that it might be a common error. 
>> What do you think?
> 
> The key is to make the error message informative at this stage, which we 
> don’t necessarily need a new type for. If we formalise ‘not authorised’ 
> problems in the resource APIs then we would also need to update the file and 
> http backed resource implementations to. So, I’d leave this as a later 
> refactoring.
> 
> What I meant here by a new type is not a new exception class but to 
> differentiate permission errors from generic errors when it comes to what 
> message is being shown when such an error occurs. At the moment I'm throwing 
> a new runtime exception of type SftpException with a message saying what has 
> happened (invalid credentials, connection error) and where (host and port 
> part of the url). I was asking if we should check if we have permissions to 
> perform a given operation (file download or upload, directory creation, etc) 
> and if not throw a SftpException with a message saying that permission was 
> denied to do it.
>  
> 
>> 
>> Also, DefaultExternalResourceRepository requires an implementation of an 
>> ExternalResourceLister yet it is currently not exercised by any test - to be 
>> honest I haven't looked into how it's used and what kind of tests would be 
>> needed for it so any pointers would be appreciated. Do we want to add some 
>> tests to the initial story for that?
> 
> It’s used whenever there’s a dynamic version in a dependency declaration. So, 
> if you’ve got one of these in one of the tests somewhere, then we're good.
> 
> I don't have a test like that yet so I will add some. Thanks for pointing me 
> in the right direction.
>  
> 
>> 
>> 
>> On Thu, Mar 6, 2014 at 3:56 AM, Adam Murdoch <adam.murd...@gradleware.com> 
>> wrote:
>> 
>> On 6 Mar 2014, at 7:33 am, Marcin Erdmann <marcin.erdm...@proxerd.pl> wrote:
>> 
>>> I finally got my head around the contract of ExternalResourceAccessor and 
>>> after doing some reverse engineering of HttpResourceAccessor and Ivy's 
>>> SFTPResolver as well as skimming SFTP protocol specs the following are my 
>>> findings and questions:
>>> 
>>> Error handling is far from perfect in both clients - they only return a 
>>> generic error when you try to get file metadata for a file that doesn't 
>>> exist but there seems to be a specific substatus for such situation called 
>>> SSH_FX_NO_SUCH_FILE. I can see that this substatus is returned by SSHD's 
>>> implementation of SFTP server when accessing files that don't exist even 
>>> though the spec(http://tools.ietf.org/id/draft-ietf-secsh-filexfer-00.txt) 
>>> cryptically describes it as "is returned when a reference is made to a file 
>>> which should exist but doesn't" - this should but doesn't part baffles me a 
>>> bit. Anyway I will assume that this substatus is returned whenever trying 
>>> to stat a non-existing file.
>>> 
>>> I'm going to use SSHD's client as it seems to be better maintained and I 
>>> like it more. I will be also able to easily change it's behavior when it 
>>> comes to handling the aforementioned SSH_FX_NO_SUCH_FILE substatus.
>>> 
>>> We will probably want to throw a specific contextual exception when 
>>> credentials are incorrect, right?
>> 
>> At this stage, I think it’s sufficient that the error message gives the user 
>> some idea that the credentials are incorrect. Eventually, it would be nice 
>> to tell the difference, if possible.
>> 
>>> 
>>> It feels like we want to have separate ssh sessions for getting metadata 
>>> and getting the file - the fact that you request an ExternalResource 
>>> doesn't mean that you will ever read it and thus close it, but you need to 
>>> open a ssh session to get the metadata. So the idea here is to open a 
>>> session, get metadata to see if the resource exists and close the session 
>>> possibly passing the metadata to the created ExternalResource if the 
>>> resource exists. Then, if resource contents are requested open a new 
>>> session and close it when close() is called on the ExternalResource. Are we 
>>> ok with such approach?
>> 
>> Yes, for now. I think at some point we will rework the 
>> ExternalResourceAccessor interface so that it can better deal with the fact 
>> that for some transports (file, sftp), the meta-data for a resource and the 
>> content for a resource have to be fetched as separate operations. The 
>> interface at the moment assumes that it’s cheap-ish to get the meta-data at 
>> the same time the content is requested.
>> 
>> This way, the caller can decide whether it needs the meta-data or not, and 
>> invoke the appropriate operations - get meta-data, get content or get 
>> meta-data and content (if supported).
>> 
>> 
>> --
>> Adam Murdoch
>> Gradle Co-founder
>> http://www.gradle.org
>> VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
>> http://www.gradleware.com
>> 
>> 
>> 
>> 
> 
> 
> 
> --
> Adam Murdoch
> Gradle Co-founder
> http://www.gradle.org
> VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
> http://www.gradleware.com
> 
> 
> 
> 
> 


--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com



Reply via email to