From ebdf965e7e0e7344bb61ec38992fa646e2254493 Mon Sep 17 00:00:00 2001
From: Alinga Yeung <Alinga.Yeung@nrc-cnrc.gc.ca>
Date: Thu, 3 Sep 2015 11:34:25 -0700
Subject: [PATCH] Story 1657 rework. Added test cases for a subject with no
 principal and a subject with more than one principal.

---
 .../ca/nrc/cadc/ac/client/UserClientTest.java | 50 ++++++++++++++++++-
 1 file changed, 49 insertions(+), 1 deletion(-)

diff --git a/projects/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/UserClientTest.java b/projects/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/UserClientTest.java
index 6a84fb04..76a37a3b 100644
--- a/projects/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/UserClientTest.java
+++ b/projects/cadcAccessControl/test/src/ca/nrc/cadc/ac/client/UserClientTest.java
@@ -69,9 +69,20 @@
 
 package ca.nrc.cadc.ac.client;
 
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import javax.security.auth.Subject;
+
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
-import ca.nrc.cadc.ac.client.UserClient;
+
+import ca.nrc.cadc.ac.AC;
+import ca.nrc.cadc.auth.HttpPrincipal;
+import ca.nrc.cadc.auth.NumericPrincipal;
+import ca.nrc.cadc.reg.client.RegistryClient;
 import ca.nrc.cadc.util.Log4jInit;
 
 import org.junit.Assert;
@@ -123,4 +134,41 @@ public class UserClientTest
         	Assert.fail("Unexpected exception: " + t.getMessage());
         }
     }
+    
+    @Test
+    public void testSubjectWithNoPrincipal() throws URISyntaxException, MalformedURLException
+    {
+        // test subject augmentation given a subject with no principal
+    	Subject subject = new Subject();
+    	this.createUserClient().augmentSubject(subject);
+    	Assert.assertEquals("Should have no principal.", 0, subject.getPrincipals().size());
+    }
+    
+    @Test
+    public void testSubjectWithMultiplePrincipal() throws URISyntaxException, MalformedURLException
+    {
+        try
+        {
+            // test subject augmentation given a subject with more than one principal
+            Subject subject = new Subject();
+            subject.getPrincipals().add(new NumericPrincipal(4));
+            subject.getPrincipals().add(new HttpPrincipal("cadcauthtest1"));
+            this.createUserClient().augmentSubject(subject);
+            Assert.fail("Expecting an IllegalArgumentException.");
+        }
+        catch(IllegalArgumentException e)
+        {
+            String expected = "Subject has more than one principal.";
+            Assert.assertEquals(expected, e.getMessage());
+        }
+    }
+    
+    protected UserClient createUserClient() throws URISyntaxException, MalformedURLException
+    {
+    	RegistryClient regClient = new RegistryClient();
+    	URI serviceURI = new URI(AC.GMS_SERVICE_URI);
+    	URL baseURL = regClient.getServiceURL(serviceURI, "https");
+    	return new UserClient(baseURL.toString());
+
+    }
 }
-- 
GitLab