Package org.surfnet.oaaas.it

Source Code of org.surfnet.oaaas.it.ClientResourceTestIT

/*
* Copyright 2012 SURFnet bv, The Netherlands
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.surfnet.oaaas.it;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import javax.ws.rs.core.MediaType;

import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;

import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.junit.Before;
import org.junit.Test;
import org.surfnet.oaaas.model.Client;
import org.surfnet.oaaas.model.ResourceServer;
import org.surfnet.oaaas.model.ValidationErrorResponse;

import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.matchers.JUnitMatchers.containsString;

public class ClientResourceTestIT extends AbstractAuthorizationServerTest {

  private WebResource webResource;
  private ResourceServer resourceServer;

  private List<String> resourceServerScopes = Arrays.asList("read", "write");

  @Before
  public void prepareRestClientAndCreateResourceServer() {
    ClientConfig config = new DefaultClientConfig();
    config.getClasses().add(JacksonJsonProvider.class);
    webResource = com.sun.jersey.api.client.Client.create(config)
        .resource(baseUrl())
        .path("admin")
        .path("resourceServer");

    ResourceServer newResourceServer = new ResourceServer();
    newResourceServer.setContactName("myContactName");
    newResourceServer.setDescription("The description");
    newResourceServer.setName("the name" + System.currentTimeMillis());
    newResourceServer.setKey("the-key-" + System.currentTimeMillis());
    newResourceServer.setThumbNailUrl("http://example.com/thumbnail");
    newResourceServer.setScopes(resourceServerScopes);

    resourceServer = webResource
        .type(MediaType.APPLICATION_JSON)
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .put(ResourceServer.class, newResourceServer);

    // setup a new webResource as entry point for Client-REST-requests.
    webResource = com.sun.jersey.api.client.Client.create(config)
        .resource(baseUrl())
        .path("admin")
        .path("resourceServer")
        .path(String.valueOf(resourceServer.getId()))
        .path("client");
  }

  @Test
  public void getNonExisting() {
    ClientResponse response = webResource
        .path("-1")
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .get(ClientResponse.class);
    assertEquals(404, response.getStatus());
  }

  @Test
  public void getAll() {
    putSomeClient();
    putSomeClient();

    ClientResponse response = webResource
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .get(ClientResponse.class);
    assertEquals(200, response.getStatus());
    assertTrue(response.getEntity(Client[].class).length > 1);
  }


  @Test
  public void get() {
    Client c = putSomeClient();

    final Client returnedFromGet = webResource
        .path(String.valueOf(c.getId()))
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .get(Client.class);

    assertEquals(c.getId(), returnedFromGet.getId());
    assertEquals(c.getAttributes(), returnedFromGet.getAttributes());
  }

  @Test
  public void put() {
    Client c = buildClient();
    Client putResult = webResource
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .put(Client.class, c);
    assertThat("Server should override provided secret with a generated one",
        putResult.getSecret(),not(equalTo(c.getSecret())));

    assertNotNull(putResult.getId());

    assertEquals(c.getAttributes(), putResult.getAttributes());
  }

  @Test
  public void putInvalidScopes() {
    Client c = buildClient();
    c.setScopes(Arrays.asList("invalidScope", "read", "write"));
    ClientResponse clientResponse = webResource
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .put(ClientResponse.class, c);
    assertThat("Server should not accept a client with scopes that are not a subset of the resourceServers scope",
        clientResponse.getStatus(), equalTo(400));
    final ValidationErrorResponse validationErrorResponse = clientResponse.getEntity(ValidationErrorResponse.class);
    assertThat(validationErrorResponse.getViolations().size(), equalTo(1));
    assertThat(validationErrorResponse.getViolations().get(0), containsString("Client should only contain scopes that its resource server defines"));
  }

  @Test
  public void post() {
    Client originalClient = putSomeClient();


    final String newDescription = "new description";
    originalClient.setDescription(newDescription);
    Client postResult = webResource
        .path(String.valueOf(originalClient.getId()))
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .post(Client.class, originalClient);
    assertEquals(newDescription, postResult.getDescription());
  }

  @Test
  public void delete() {
    Client c = putSomeClient();
    String id = String.valueOf(c.getId());
    ClientResponse deleteResponse = webResource
        .path(id)
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .delete(ClientResponse.class);
    assertEquals(204, deleteResponse.getStatus());

    ClientResponse getResponse = webResource
        .path(id)
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .get(ClientResponse.class);
    assertEquals(404, getResponse.getStatus());
  }

  private Client buildClient() {
    Client c = new Client();
    String r = UUID.randomUUID().toString();
    c.setClientId(r);
    c.setContactEmail("contact@example.com");
    c.setContactName("contact name");
    c.setName(r);
    c.setScopes(Arrays.asList("read"));
    c.setSecret(r);
    c.setDescription("Some description");
    final HashMap<String, String> attributes = new HashMap<String, String>();
    attributes.put("myKey", "myValue");
    attributes.put("myKey2", "myValue2");
    attributes.put("myKey3", "myValue3");
    c.setAttributes(attributes);
    return c;
  }

  private Client putSomeClient() {
    Client c = buildClient();
    return webResource
        .header("Authorization", authorizationBearer(ACCESS_TOKEN))
        .put(Client.class, c);
  }

}
TOP

Related Classes of org.surfnet.oaaas.it.ClientResourceTestIT

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.