1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package edu.internet2.middleware.grouper.ws.scim;
18
19 import com.fasterxml.jackson.databind.JsonNode;
20 import com.fasterxml.jackson.databind.ObjectMapper;
21 import org.apache.http.HttpResponse;
22 import org.apache.http.HttpStatus;
23 import org.apache.http.client.methods.HttpGet;
24 import org.apache.http.client.methods.HttpUriRequest;
25 import org.apache.http.entity.ContentType;
26 import org.apache.http.impl.client.HttpClientBuilder;
27 import org.apache.http.util.EntityUtils;
28 import org.junit.Test;
29
30 import java.io.IOException;
31 import java.util.Arrays;
32
33 import static org.hamcrest.CoreMatchers.equalTo;
34 import static org.hamcrest.MatcherAssert.assertThat;
35 import static org.junit.Assert.assertEquals;
36
37 public class TierResourceTypesProviderIntegrationTest {
38
39 private static final String RESOURCE_TYPES_ENDPOINT = "http://localhost:8080/grouper-ws/scim/v2/ResourceTypes";
40
41 private void addScimHeaders(HttpUriRequest request) {
42 request.setHeader("Content-Type", "application/scim+json");
43 request.setHeader("Accept", "application/scim+json");
44 request.setHeader("Authorization", "Basic R3JvdXBlclN5c3RlbTpwYXNz");
45 }
46
47 @Test
48 public void getResourceTypesConfig() throws IOException {
49
50 HttpUriRequest request = new HttpGet(RESOURCE_TYPES_ENDPOINT);
51 addScimHeaders(request);
52
53 HttpResponse httpResponse = HttpClientBuilder.create().build().execute(request);
54
55 assertThat(httpResponse.getStatusLine().getStatusCode(), equalTo(HttpStatus.SC_OK));
56 assertThat(ContentType.getOrDefault(httpResponse.getEntity()).getMimeType(), equalTo("application/scim+json"));
57
58 String jsonString = EntityUtils.toString(httpResponse.getEntity());
59 ObjectMapper objectMapper = new ObjectMapper();
60
61 for (JsonNode node: objectMapper.readTree(jsonString)) {
62 assertThat(node.get("meta").get("resourceType").asText(), equalTo("ResourceType"));
63 assertEquals(objectMapper.readerForListOf(String.class).readValue(node.get("schemas")),
64 Arrays.asList("urn:ietf:params:scim:schemas:core:2.0:ResourceType"));
65
66 switch (node.get("schema").asText()) {
67 case "urn:ietf:params:scim:schemas:core:2.0:Group":
68 assertThat(node.get("endpoint").asText(), equalTo("/Groups"));
69 assertThat(node.get("meta").get("location").asText(), equalTo("http://localhost:8080/grouper-ws/scim/v2/ResourceTypes/Group"));
70 assertThat(node.get("name").asText(), equalTo("Group"));
71 assertThat(node.get("description").asText(), equalTo("Top level SCIM Group"));
72 assertThat(node.get("schemaExtensions").get(0).get("schema").asText(), equalTo("urn:tier:params:scim:schemas:extension:TierMetaExtension"));
73 assertThat(node.get("schemaExtensions").get(0).get("required").asBoolean(), equalTo(Boolean.FALSE));
74 assertThat(node.get("schemaExtensions").get(1).get("schema").asText(), equalTo("urn:grouper:params:scim:schemas:extension:TierGroupExtension"));
75 assertThat(node.get("schemaExtensions").get(1).get("required").asBoolean(), equalTo(Boolean.FALSE));
76
77 assertThat(node.get("id").asText(), equalTo("Group"));
78 break;
79 case "urn:ietf:params:scim:schemas:core:2.0:User":
80 assertThat(node.get("endpoint").asText(), equalTo("/Users"));
81 assertThat(node.get("meta").get("location").asText(), equalTo("http://localhost:8080/grouper-ws/scim/v2/ResourceTypes/User"));
82 assertThat(node.get("name").asText(), equalTo("User Account"));
83 assertThat(node.get("description").asText(), equalTo("Top level SCIM User"));
84 assertThat(node.get("schemaExtensions").get(0).get("schema").asText(), equalTo("urn:tier:params:scim:schemas:extension:TierMetaExtension"));
85 assertThat(node.get("schemaExtensions").get(0).get("required").asBoolean(), equalTo(Boolean.FALSE));
86 assertThat(node.get("id").asText(), equalTo("User"));
87 break;
88 case "urn:tier:params:scim:schemas:Membership":
89 assertThat(node.get("endpoint").asText(), equalTo("/Memberships"));
90 assertThat(node.get("meta").get("location").asText(), equalTo("http://localhost:8080/grouper-ws/scim/v2/ResourceTypes/Membership"));
91 assertThat(node.get("name").asText(), equalTo("Membership"));
92 assertThat(node.get("description").asText(), equalTo("Resource for representing Membership schema data"));
93 assertThat(node.get("id").asText(), equalTo("Membership"));
94 break;
95 default:
96 throw new RuntimeException("Unexpected resource type: " + node.get("id"));
97 }
98 }
99 }
100
101 @Test
102 public void getUserResourceByName() throws IOException {
103 HttpUriRequest request = new HttpGet(RESOURCE_TYPES_ENDPOINT + "/User");
104 addScimHeaders(request);
105
106 HttpResponse httpResponse = HttpClientBuilder.create().build().execute(request);
107
108 assertThat(httpResponse.getStatusLine().getStatusCode(), equalTo(HttpStatus.SC_OK));
109 assertThat(ContentType.getOrDefault(httpResponse.getEntity()).getMimeType(), equalTo("application/scim+json"));
110
111 String jsonString = EntityUtils.toString(httpResponse.getEntity());
112 ObjectMapper objectMapper = new ObjectMapper();
113 JsonNode json = objectMapper.readTree(jsonString);
114 assertThat(json.get("meta").get("resourceType").asText(), equalTo("ResourceType"));
115 assertEquals(objectMapper.readerForListOf(String.class).readValue(json.get("schemas")),
116 Arrays.asList("urn:ietf:params:scim:schemas:core:2.0:ResourceType"));
117 assertThat(json.get("endpoint").asText(), equalTo("/Users"));
118 assertThat(json.get("meta").get("location").asText(), equalTo("http://localhost:8080/grouper-ws/scim/v2/ResourceTypes/User"));
119 assertThat(json.get("name").asText(), equalTo("User Account"));
120 assertThat(json.get("description").asText(), equalTo("Top level SCIM User"));
121 assertThat(json.get("schemaExtensions").get(0).get("schema").asText(), equalTo("urn:tier:params:scim:schemas:extension:TierMetaExtension"));
122 assertThat(json.get("schemaExtensions").get(0).get("required").asBoolean(), equalTo(Boolean.FALSE));
123 assertThat(json.get("id").asText(), equalTo("User"));
124 }
125
126 @Test
127 public void getGroupResourceByName() throws IOException {
128 HttpUriRequest request = new HttpGet(RESOURCE_TYPES_ENDPOINT + "/Group");
129 addScimHeaders(request);
130
131 HttpResponse httpResponse = HttpClientBuilder.create().build().execute(request);
132
133 assertThat(httpResponse.getStatusLine().getStatusCode(), equalTo(HttpStatus.SC_OK));
134 assertThat(ContentType.getOrDefault(httpResponse.getEntity()).getMimeType(), equalTo("application/scim+json"));
135
136 String jsonString = EntityUtils.toString(httpResponse.getEntity());
137 ObjectMapper objectMapper = new ObjectMapper();
138 JsonNode json = objectMapper.readTree(jsonString);
139 assertThat(json.get("meta").get("resourceType").asText(), equalTo("ResourceType"));
140 assertEquals(objectMapper.readerForListOf(String.class).readValue(json.get("schemas")),
141 Arrays.asList("urn:ietf:params:scim:schemas:core:2.0:ResourceType"));
142 assertThat(json.get("endpoint").asText(), equalTo("/Groups"));
143 assertThat(json.get("meta").get("location").asText(), equalTo("http://localhost:8080/grouper-ws/scim/v2/ResourceTypes/Group"));
144 assertThat(json.get("name").asText(), equalTo("Group"));
145 assertThat(json.get("description").asText(), equalTo("Top level SCIM Group"));
146 assertThat(json.get("schemaExtensions").get(0).get("schema").asText(), equalTo("urn:tier:params:scim:schemas:extension:TierMetaExtension"));
147 assertThat(json.get("schemaExtensions").get(0).get("required").asBoolean(), equalTo(Boolean.FALSE));
148 assertThat(json.get("schemaExtensions").get(1).get("schema").asText(), equalTo("urn:grouper:params:scim:schemas:extension:TierGroupExtension"));
149 assertThat(json.get("schemaExtensions").get(1).get("required").asBoolean(), equalTo(Boolean.FALSE));
150
151 assertThat(json.get("id").asText(), equalTo("Group"));
152 }
153
154 @Test
155 public void getMembershipResourceByName() throws IOException {
156 HttpUriRequest request = new HttpGet(RESOURCE_TYPES_ENDPOINT + "/Membership");
157 addScimHeaders(request);
158
159 HttpResponse httpResponse = HttpClientBuilder.create().build().execute(request);
160
161 assertThat(httpResponse.getStatusLine().getStatusCode(), equalTo(HttpStatus.SC_OK));
162 assertThat(ContentType.getOrDefault(httpResponse.getEntity()).getMimeType(), equalTo("application/scim+json"));
163
164 String jsonString = EntityUtils.toString(httpResponse.getEntity());
165 ObjectMapper objectMapper = new ObjectMapper();
166 JsonNode json = objectMapper.readTree(jsonString);
167 assertThat(json.get("meta").get("resourceType").asText(), equalTo("ResourceType"));
168 assertEquals(objectMapper.readerForListOf(String.class).readValue(json.get("schemas")),
169 Arrays.asList("urn:ietf:params:scim:schemas:core:2.0:ResourceType"));
170 assertThat(json.get("endpoint").asText(), equalTo("/Memberships"));
171 assertThat(json.get("meta").get("location").asText(), equalTo("http://localhost:8080/grouper-ws/scim/v2/ResourceTypes/Membership"));
172 assertThat(json.get("name").asText(), equalTo("Membership"));
173 assertThat(json.get("description").asText(), equalTo("Resource for representing Membership schema data"));
174 assertThat(json.get("id").asText(), equalTo("Membership"));
175 }
176
177 }