Skip to content

Commit 143cf74

Browse files
committed
Added unit tests for OpenConnectId
1 parent e2294f2 commit 143cf74

File tree

3 files changed

+119
-27
lines changed

3 files changed

+119
-27
lines changed

services/azure-media/src/main/java/com/microsoft/windowsazure/services/media/implementation/templates/tokenrestriction/TokenRestrictionTemplate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class TokenRestrictionTemplate {
2525
@XmlElement(name = "Issuer", required = true)
2626
private URI issuer;
2727

28-
@XmlElement(name = "PrimaryVerificationKey")
28+
@XmlElement(name = "PrimaryVerificationKey", nillable = true)
2929
private TokenVerificationKey primaryVerificationKey;
3030

3131
@XmlElementWrapper(name = "RequiredClaims")

services/azure-media/src/main/java/com/microsoft/windowsazure/services/media/implementation/templates/tokenrestriction/TokenRestrictionTemplateSerializer.java

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -39,30 +39,9 @@ private TokenRestrictionTemplateSerializer() {
3939
}
4040

4141
public static String serialize(TokenRestrictionTemplate template) throws JAXBException {
42-
43-
if (template.getPrimaryVerificationKey() == null && template.getOpenIdConnectDiscoveryDocument() == null) {
44-
throw new IllegalArgumentException(
45-
ErrorMessages.PRIMARY_VERIFICATIONKEY_AND_OPENIDCONNECTDISCOVERYDOCUMENT_ARE_NULL);
46-
}
47-
48-
if (template.getOpenIdConnectDiscoveryDocument() != null) {
49-
if (template.getOpenIdConnectDiscoveryDocument().getOpenIdDiscoveryUri() == null
50-
|| template.getOpenIdConnectDiscoveryDocument().getOpenIdDiscoveryUri().isEmpty()) {
51-
throw new IllegalArgumentException(ErrorMessages.OPENIDDISCOVERYURI_STRING_IS_NULL_OR_EMPTY);
52-
}
53-
54-
boolean openIdDiscoveryUrlValid = true;
55-
try {
56-
new URL(template.getOpenIdConnectDiscoveryDocument().getOpenIdDiscoveryUri());
57-
} catch (MalformedURLException e) {
58-
openIdDiscoveryUrlValid = false;
59-
}
60-
61-
if (!openIdDiscoveryUrlValid) {
62-
throw new IllegalArgumentException(ErrorMessages.OPENIDDISCOVERYURI_STRING_IS_NOT_ABSOLUTE_URI);
63-
}
64-
}
65-
42+
43+
validateTokenRestrictionTemplate(template);
44+
6645
StringWriter writer = new StringWriter();
6746
JAXBContext context = JAXBContext.newInstance(TokenRestrictionTemplate.class);
6847
Marshaller m = context.createMarshaller();
@@ -85,7 +64,32 @@ public String getPreferredPrefix(String namespaceUri, String suggestion, boolean
8564
return writer.toString();
8665
}
8766

88-
public static TokenRestrictionTemplate deserialize(String xml) throws JAXBException {
67+
private static void validateTokenRestrictionTemplate(TokenRestrictionTemplate template) {
68+
if (template.getPrimaryVerificationKey() == null && template.getOpenIdConnectDiscoveryDocument() == null) {
69+
throw new IllegalArgumentException(
70+
ErrorMessages.PRIMARY_VERIFICATIONKEY_AND_OPENIDCONNECTDISCOVERYDOCUMENT_ARE_NULL);
71+
}
72+
73+
if (template.getOpenIdConnectDiscoveryDocument() != null) {
74+
if (template.getOpenIdConnectDiscoveryDocument().getOpenIdDiscoveryUri() == null
75+
|| template.getOpenIdConnectDiscoveryDocument().getOpenIdDiscoveryUri().isEmpty()) {
76+
throw new IllegalArgumentException(ErrorMessages.OPENIDDISCOVERYURI_STRING_IS_NULL_OR_EMPTY);
77+
}
78+
79+
boolean openIdDiscoveryUrlValid = true;
80+
try {
81+
new URL(template.getOpenIdConnectDiscoveryDocument().getOpenIdDiscoveryUri());
82+
} catch (MalformedURLException e) {
83+
openIdDiscoveryUrlValid = false;
84+
}
85+
86+
if (!openIdDiscoveryUrlValid) {
87+
throw new IllegalArgumentException(ErrorMessages.OPENIDDISCOVERYURI_STRING_IS_NOT_ABSOLUTE_URI);
88+
}
89+
}
90+
}
91+
92+
public static TokenRestrictionTemplate deserialize(String xml) throws JAXBException {
8993
try {
9094
return deserialize(xml, null);
9195
} catch (SAXException e) {
@@ -103,7 +107,9 @@ public static TokenRestrictionTemplate deserialize(String xml, String validation
103107
Schema schema = factory.newSchema(new File(validationSchemaFileName));
104108
u.setSchema(schema);
105109
}
106-
return (TokenRestrictionTemplate) u.unmarshal(new StringReader(xml));
110+
TokenRestrictionTemplate template = (TokenRestrictionTemplate) u.unmarshal(new StringReader(xml));
111+
validateTokenRestrictionTemplate(template);
112+
return template;
107113
}
108114

109115
private static String generateTokenExpiry(Date expiry) {

services/azure-media/src/test/java/com/microsoft/windowsazure/services/media/implementation/templates/tokenrestriction/TokenRestrictionTemplateSerializerTests.java

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static org.junit.Assert.assertArrayEquals;
44
import static org.junit.Assert.assertEquals;
55
import static org.junit.Assert.assertNotNull;
6+
import static org.junit.Assert.assertNull;
67
import static org.junit.Assert.assertTrue;
78
import static org.junit.Assert.fail;
89

@@ -232,4 +233,89 @@ public void NullContentKeyIdentifierClaimShouldThrownJWT() throws Exception {
232233
assertTrue(e.getMessage().contains("keyIdForContentKeyIdentifierClaim"));
233234
}
234235
}
236+
237+
@Test
238+
public void OpenIdDocumentAsVerificationKeyRoundTrip() throws JAXBException, URISyntaxException
239+
{
240+
String openConnectId = "https://openconnectIddiscoveryUri";
241+
String expectedElement =
242+
"<OpenIdDiscoveryUri>https://openconnectIddiscoveryUri</OpenIdDiscoveryUri>";
243+
244+
TokenRestrictionTemplate template = new TokenRestrictionTemplate(TokenType.JWT);
245+
template.setAudience(new URI(_sampleAudience));
246+
template.setIssuer(new URI(_sampleIssuer));
247+
OpenIdConnectDiscoveryDocument openId = new OpenIdConnectDiscoveryDocument();
248+
openId.setOpenIdDiscoveryUri(openConnectId);
249+
template.setOpenIdConnectDiscoveryDocument(openId);
250+
String templateAsString = TokenRestrictionTemplateSerializer.serialize(template);
251+
assertTrue(templateAsString.contains("<PrimaryVerificationKey i:nil=\"true\"/>"));
252+
assertTrue(templateAsString.contains(expectedElement));
253+
TokenRestrictionTemplate output = TokenRestrictionTemplateSerializer.deserialize(templateAsString);
254+
assertNotNull(output);
255+
assertNotNull(output.getOpenIdConnectDiscoveryDocument());
256+
assertNull(output.getPrimaryVerificationKey());
257+
assertTrue(output.getAlternateVerificationKeys().isEmpty());
258+
assertEquals(output.getOpenIdConnectDiscoveryDocument().getOpenIdDiscoveryUri(), openConnectId);
259+
260+
}
261+
262+
@Test
263+
public void TokenRestrictionTemplateSerializeNotPrimaryKeyAndNoOpenConnectIdDocument() throws URISyntaxException
264+
{
265+
TokenRestrictionTemplate template = new TokenRestrictionTemplate(TokenType.JWT);
266+
template.setAudience(new URI(_sampleAudience));
267+
template.setIssuer(new URI(_sampleIssuer));
268+
try {
269+
TokenRestrictionTemplateSerializer.serialize(template);
270+
fail();
271+
}
272+
catch (Exception ex) {
273+
assertEquals("Both PrimaryVerificationKey and OpenIdConnectDiscoveryDocument are null.", ex.getMessage());
274+
}
275+
}
276+
277+
@Test
278+
public void InputMissingPrimaryKeyShouldNotThrow()
279+
{
280+
String tokenTemplate = "<TokenRestrictionTemplate xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/Azure/MediaServices/KeyDelivery/TokenRestrictionTemplate/v1\"><AlternateVerificationKeys><TokenVerificationKey i:type=\"SymmetricVerificationKey\"><KeyValue>GG07fDPZ+HMD2vcoknMqYjEJMb7LSq8zUmdCYMvRCevnQK//ilbhODO/FydMrHiwZGmI6XywvOOU7SSzRPlI3Q==</KeyValue></TokenVerificationKey></AlternateVerificationKeys><Audience>http://sampleaudience/</Audience><Issuer>http://sampleissuerurl/</Issuer><RequiredClaims><TokenClaim><ClaimType>urn:microsoft:azure:mediaservices:contentkeyidentifier</ClaimType><ClaimValue i:nil=\"true\" /></TokenClaim><TokenClaim><ClaimType>urn:myservice:claims:rental</ClaimType><ClaimValue>true</ClaimValue></TokenClaim></RequiredClaims></TokenRestrictionTemplate>";
281+
try {
282+
TokenRestrictionTemplateSerializer.deserialize(tokenTemplate);
283+
fail();
284+
} catch (Exception ex) {
285+
assertEquals("Both PrimaryVerificationKey and OpenIdConnectDiscoveryDocument are null.", ex.getMessage());
286+
}
287+
}
288+
289+
@Test
290+
public void TokenRestrictionTemplateDeserializeNotAbsoluteDiscoveryUri()
291+
{
292+
String body =
293+
"<TokenRestrictionTemplate xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/Azure/MediaServices/KeyDelivery/TokenRestrictionTemplate/v1\" ><AlternateVerificationKeys /><Audience>http://sampleissuerurl/</Audience><Issuer>http://sampleaudience/</Issuer><OpenIdConnectDiscoveryDocument ><OpenIdDiscoveryUri >RelativeUri</OpenIdDiscoveryUri></OpenIdConnectDiscoveryDocument></TokenRestrictionTemplate>";
294+
295+
try
296+
{
297+
TokenRestrictionTemplateSerializer.deserialize(body);
298+
fail();
299+
}
300+
catch (Exception ex)
301+
{
302+
assertEquals("String representation of OpenIdConnectDiscoveryDocument.OpenIdDiscoveryUri is not valid absolute Uri.", ex.getMessage());
303+
}
304+
}
305+
306+
@Test
307+
public void TokenRestrictionTemplateDeserializeNilOpenConnectIdDocumentUriNoPrimaryKey()
308+
{
309+
String body =
310+
"<TokenRestrictionTemplate xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/Azure/MediaServices/KeyDelivery/TokenRestrictionTemplate/v1\" ><AlternateVerificationKeys /><Audience>http://sampleissuerurl/</Audience><Issuer>http://sampleaudience/</Issuer><OpenIdConnectDiscoveryDocument ><OpenIdDiscoveryUri i:nil=\"true\"></OpenIdDiscoveryUri></OpenIdConnectDiscoveryDocument></TokenRestrictionTemplate>";
311+
try
312+
{
313+
TokenRestrictionTemplateSerializer.deserialize(body);
314+
fail();
315+
}
316+
catch (Exception ex)
317+
{
318+
assertEquals("OpenIdConnectDiscoveryDocument.OpenIdDiscoveryUri string value is null or empty.", ex.getMessage());
319+
}
320+
}
235321
}

0 commit comments

Comments
 (0)