[ 
https://issues.apache.org/jira/browse/JCLOUDS-967?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14638433#comment-14638433
 ] 

Ignasi Barrera commented on JCLOUDS-967:
----------------------------------------

Thanks for taking care of fixing it!

There are two places where the tests can (should) be added:

* In the 
[BaseChefApiLiveTest|https://github.com/jclouds/jclouds/blob/master/apis/chef/src/test/java/org/jclouds/chef/internal/BaseChefApiLiveTest.java#L537]
 you can verify that the retrieved client has all the required properties. but 
take care, the test must work with Chef 12 and with previous versions of the 
Chef server.
* Add a test in the 
[ChefApiExpectTest|https://github.com/jclouds/jclouds/blob/master/apis/chef/src/test/java/org/jclouds/chef/ChefApiExpectTest.java]
 class that tests the {{getClient}} call. Expect tests use mock responses, so 
you don't have to worry about the target Chef server version; they will jsut 
verify that the request is the right one and the response can be properly 
deserialized. You can create one with a mock response from a Chef 11 and one 
with a mock response from a Chef 12.

This said, Expect unit tests are deprecated in jclouds. Now we use 
MockWebserver for unit testing APIs, but the existing Chef tests have not yet 
been migrated. I encourage you to have a look at [this DigitalOcean 
test|https://github.com/jclouds/jclouds-labs/blob/master/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/ActionApiMockTest.java]
 and its base class to see how they work (the concept is the same as the one in 
Expect tests: mocking the Chef server responses), and to create a new MockTest 
class for the {{getClient}} unit tests instead of adding them to the existing 
expect test classes.

In any case, we can discuss the details in the pull request itself.

> Client object doesn't populate public key
> -----------------------------------------
>
>                 Key: JCLOUDS-967
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-967
>             Project: jclouds
>          Issue Type: Bug
>          Components: jclouds-chef
>    Affects Versions: 2.0.0, 1.9.0
>            Reporter: Adrian Bravo
>
> Chef's API for version 12 returns a different set of values that those shown 
> on the chef api documentation and expected by jclouds. For example, jclouds' 
> ChefApi.getClient("chef-client.example.com") produces the call below:
> {code}
> GET 
> https://192.168.242.169:443/organizations/mytestorg/clients/chef-client.example.com
> {code}
> Returns the following:
> {code}
> {"public_key":"-----BEGIN PUBLIC 
> KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoNgWKe36NI0aLIaRxj2i\nF3OgVNnrW0A7I6x7IMo5MbKZQIU0WIMYUdNElOGI8EuSOvocSfetfOGAwTNTNOeB\ndWIv05/WeMzgMNxtdmsiKqW/1T45Z6Q+h3dxDJGr+PM9gQ56RGnytZ5IaJ7c/AJH\n+Vm1Loe8VFk4SZWOmrD0RxfIHMGDpkwfVhZsT76IdS9cDnm2bhxadHx0qiG6wyl5\nkheTFyObmiMl+KjEQi8Ws8+JlmFdrQhJRcvNeFR6CXuF+8sgr3euvBzFfl3GCdhM\n0jFMBp1GE6wpgz7BgMhMYFuUWLYqub094PgqcmAs5SUTzTK8NNNscp563Ol/2vMl\nPQIDAQAB\n-----END
>  PUBLIC 
> KEY-----\n","name":"chef-client.example.com","clientname":"chef-client.example.com","validator":false,"orgname":"mytestorg","json_class":"Chef::ApiClient","chef_type":"client"}
> {code}
> Just for reference, this is the same call made by knife client show 
> <client_name> as shown below:
> {code}
> adrian.bravo@ABRAVO-01:~$ knife client show chef-client.example.com
> admin:      false
> chef_type:  client
> json_class: Chef::ApiClient
> name:       chef-client.example.com
> public_key: -----BEGIN PUBLIC KEY-----
> MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoNgWKe36NI0aLIaRxj2i
> F3OgVNnrW0A7I6x7IMo5MbKZQIU0WIMYUdNElOGI8EuSOvocSfetfOGAwTNTNOeB
> dWIv05/WeMzgMNxtdmsiKqW/1T45Z6Q+h3dxDJGr+PM9gQ56RGnytZ5IaJ7c/AJH
> +Vm1Loe8VFk4SZWOmrD0RxfIHMGDpkwfVhZsT76IdS9cDnm2bhxadHx0qiG6wyl5
> kheTFyObmiMl+KjEQi8Ws8+JlmFdrQhJRcvNeFR6CXuF+8sgr3euvBzFfl3GCdhM
> 0jFMBp1GE6wpgz7BgMhMYFuUWLYqub094PgqcmAs5SUTzTK8NNNscp563Ol/2vMl
> PQIDAQAB
> -----END PUBLIC KEY-----
> validator:  false
> {code}
> The code in jclouds Client class expects it to come back with a private key 
> and a certificate field instead. Those fields remain null after the call 
> above, but there is no way to access the public key.
> I've added the public key attribute to Client and updated the rest of the 
> class accordingly to be able to retrieve the public key after such a call 
> without removing the private key and certificate fields that are useful for 
> other calls (and maybe older versions). The code works and the current tests 
> pass. I would like to submit a PR with the fix as soon as I have some tests 
> written. I would appreciate some help pointing out where those tests should 
> live and which type of tests are you expecting for a minor fix like this 
> (added an attribute, a getter, and adapted the class to take it into account).
> Thanks!



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to