Improve coverage of cadi-aaf 55/46455/2
authorIanHowell <ian.howell@att.com>
Mon, 7 May 2018 19:55:47 +0000 (14:55 -0500)
committerIan Howell <ian.howell@att.com>
Mon, 7 May 2018 20:28:01 +0000 (20:28 +0000)
Issue-ID: AAF-223
Change-Id: I547206f0f36f8cd1f7d6d064af6e9d555a995a51
Signed-off-by: IanHowell <ian.howell@att.com>
cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/AAFPermission.java
cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFLocator.java
cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AbsAAFLocator.java
cadi/aaf/src/test/java/org/onap/aaf/cadi/aaf/cert/test/JU_AAFListedCertIdentity.java
cadi/aaf/src/test/java/org/onap/aaf/cadi/aaf/v2_0/test/JU_AAFLocator.java
cadi/aaf/src/test/java/org/onap/aaf/cadi/aaf/v2_0/test/JU_AbsAAFLocator.java [new file with mode: 0644]
cadi/aaf/src/test/java/org/onap/aaf/cadi/lur/aaf/test/JU_JMeter.java
cadi/aaf/src/test/java/org/onap/aaf/cadi/oauth/test/JU_OAuthTest.java
cadi/aaf/src/test/java/org/onap/aaf/content/JU_Content.java

index 37fb859..e586d99 100644 (file)
@@ -71,7 +71,6 @@ public class AAFPermission implements Permission {
         * If you want a simple field comparison, it is faster without REGEX
         */
        public boolean match(Permission p) {
-               boolean rv;
                String aafType;
                String aafInstance;
                String aafAction;
index 4f60eda..e7e3ef3 100644 (file)
@@ -79,15 +79,16 @@ public class AAFLocator extends AbsAAFLocator<BasicTrans>  {
                                        int slash = aaf_locator_host.lastIndexOf("//");
                                        host = aaf_locator_host.substring(slash+2);
                                }
-                               client = new HClient(ss, new URI(
-                                                                                       locatorURI.getScheme(),
-                                                                                       locatorURI.getUserInfo(),
-                                                                                       host,
-                                                                                       locatorURI.getPort(),
-                                                                                       "/locate/"+name + '/' + version,
-                                                                                       null,
-                                                                                       null
-                                                                                       ), connectTimeout);
+                               URI uri = new URI(
+                                                       locatorURI.getScheme(),
+                                                       locatorURI.getUserInfo(),
+                                                       host,
+                                                       locatorURI.getPort(),
+                                                       "/locate/"+name + '/' + version,
+                                                       null,
+                                                       null
+                                                       );
+                               client = createClient(ss, uri, connectTimeout);
                        } else {
                                client = new HClient(ss, locatorURI, connectTimeout);
                        }
@@ -129,4 +130,8 @@ public class AAFLocator extends AbsAAFLocator<BasicTrans>  {
        protected URI getURI() {
                return client.getURI();
        }
+       
+       protected HClient createClient(SecuritySetter<HttpURLConnection> ss, URI uri, int connectTimeout) throws LocatorException {
+               return new HClient(ss, uri, connectTimeout);
+       }
 }
index ab0f595..fc29760 100644 (file)
@@ -82,21 +82,8 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
                        this.version = Config.AAF_DEFAULT_VERSION;
                } else {
                        String[] split = Split.split(':', name);
-                       
-                       switch(split.length) {
-                               case 1:
-                                       this.name = split[0];
-                                       this.version = Config.AAF_DEFAULT_VERSION;
-                                       break;
-                               case 0:
-                                       this.name = name;
-                                       this.version = Config.AAF_DEFAULT_VERSION;
-                                       break;
-                               default:
-                                       this.version = split[1];
-                                       this.name = split[0];
-                                       
-                       }
+                       this.name = split[0];
+                       this.version = (split.length > 1) ? split[1] : Config.AAF_DEFAULT_VERSION;
                }
                
        }
@@ -138,13 +125,11 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
                if(key.startsWith("http")) {
                        if(name!=null) {
                                if(locatorCreator != null) {
-                                       if(name!=null) {
-                                               AbsAAFLocator<?> aal = locatorCreator.create(name, version);
-                                               if(pathInfo!=null) {
-                                                       aal.setPathInfo(pathInfo);
-                                               }
-                                               return aal;
+                                       AbsAAFLocator<?> aal = locatorCreator.create(name, version);
+                                       if(pathInfo!=null) {
+                                               aal.setPathInfo(pathInfo);
                                        }
+                                       return aal;
                                }
                        } else {
                                return new PropertyLocator(key);
@@ -491,7 +476,7 @@ public abstract class AbsAAFLocator<TRANS extends Trans> implements Locator<URI>
                        try {
                                return new URI(rv.getScheme(),rv.getUserInfo(),rv.getHost(),rv.getPort(),pathInfo,query,fragment);
                        } catch (URISyntaxException e) {
-                               throw new LocatorException("Error coping URL");
+                               throw new LocatorException("Error copying URL");
                        }
                }
                return rv;
index 3698b36..f2d91b0 100644 (file)
@@ -32,7 +32,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
-import java.net.HttpURLConnection;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.util.ArrayList;
index 4c5af01..5388f75 100644 (file)
 
 package org.onap.aaf.cadi.aaf.v2_0.test;
 
+import static org.junit.Assert.*;
+import static org.hamcrest.CoreMatchers.*;
+import static org.mockito.Mockito.*;
+
+import org.junit.*;
+import org.mockito.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.lang.reflect.Field;
 import java.net.HttpURLConnection;
 import java.net.URI;
-import static org.junit.Assert.*;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
 import org.onap.aaf.cadi.PropAccess;
-import org.onap.aaf.cadi.Locator.Item;
+import org.onap.aaf.cadi.SecuritySetter;
+import org.onap.aaf.cadi.CadiException;
+import org.onap.aaf.cadi.LocatorException;
 import org.onap.aaf.cadi.aaf.v2_0.AAFLocator;
 import org.onap.aaf.cadi.aaf.v2_0.AbsAAFLocator;
+import org.onap.aaf.cadi.client.Future;
 import org.onap.aaf.cadi.config.Config;
 import org.onap.aaf.cadi.config.SecurityInfoC;
+import org.onap.aaf.cadi.http.HClient;
+import org.onap.aaf.misc.env.Data.TYPE;
 import org.onap.aaf.misc.env.impl.BasicTrans;
-import org.onap.aaf.misc.rosetta.env.RosettaEnv;
+import org.onap.aaf.misc.rosetta.env.RosettaDF;
 
-public class JU_AAFLocator {
+import locate.v1_0.Endpoint;
+import locate.v1_0.Endpoints;
 
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-       }
+public class JU_AAFLocator {
+       
+       @Mock private HClient clientMock;
+       @Mock private Future<Endpoints> futureMock;
+       @Mock private Endpoints endpointsMock;
+       
+       private PropAccess access;
+       
+       private ByteArrayOutputStream errStream;
+       
+       private static final String uriString = "https://example.com";
 
        @Before
        public void setUp() throws Exception {
-       }
+               MockitoAnnotations.initMocks(this);
+               
+               doReturn(futureMock).when(clientMock).futureRead((RosettaDF<?>)any(), eq(TYPE.JSON));
+               when(clientMock.timeout()).thenReturn(1);
+               when(clientMock.getURI()).thenReturn(new URI(uriString));
+               when(futureMock.get(1)).thenReturn(true);
+               
+               futureMock.value = endpointsMock;
+               List<Endpoint> endpoints = new ArrayList<>();
+               endpoints.add(new Endpoint());
+               when(endpointsMock.getEndpoint()).thenReturn(endpoints);
+
+               access = new PropAccess(new PrintStream(new ByteArrayOutputStream()), new String[0]);
+               
+               errStream = new ByteArrayOutputStream();
 
+               System.setErr(new PrintStream(errStream));
+       }
+       
        @After
-       public void tearDown() throws Exception {
+       public void tearDown() {
+               System.setErr(System.err);
+       }
+       
+       @AfterClass
+       public static void tearDownAfterClass() throws Exception {
+               Field field = SecurityInfoC.class.getDeclaredField("sicMap");
+               field.setAccessible(true);
+               field.set(null, new HashMap<Class<?>,SecurityInfoC<?>>());
        }
 
        @Test
-       public void test() {
-               // TODO: Ian [JUnit] This fails because these files don't exist
-               assertTrue(true);
-               // try {
-               //      PropAccess propAccess = new PropAccess("cadi_prop_files=/opt/app/aaf/common/com.att.aaf.common.props:/opt/app/aaf/common/com.att.aaf.props");
-               //      SecurityInfoC<HttpURLConnection> si = SecurityInfoC.instance(propAccess, HttpURLConnection.class);
-               //      String alu = propAccess.getProperty(Config.AAF_LOCATE_URL,"https://mithrilcsp.sbc.com:8095/locate");
-               //      URI locatorURI = new URI(alu+"/com.att.aaf.service/2.0");
-               //      AbsAAFLocator<BasicTrans> al = new AAFLocator(si, locatorURI);
-               //      Assert.assertTrue(al.refresh());
-               //      Item i = al.first();
-               //      i = al.next(i);
-               //      i = al.best();
-               // } catch (Exception e) {
-               //      Assert.fail();
-               // }
+       public void test() throws CadiException, URISyntaxException, LocatorException {
+               access.setProperty(Config.CADI_LATITUDE, "38.62");  // St Louis approx lat
+               access.setProperty(Config.CADI_LONGITUDE, "90.19");  // St Louis approx lon
+               SecurityInfoC<HttpURLConnection> si = SecurityInfoC.instance(access, HttpURLConnection.class);
+               String alu = access.getProperty(Config.AAF_LOCATE_URL,"https://mithrilcsp.sbc.com:8095/locate");
+               URI locatorURI = new URI(alu+"/com.att.aaf.service/2.0");
+               AbsAAFLocator<BasicTrans> al = new AAFLocator(si, locatorURI) {
+                       @Override
+                       protected HClient createClient(SecuritySetter<HttpURLConnection> ss, URI uri, int connectTimeout) throws LocatorException {
+                               return clientMock;
+                       }
+               };
+               assertThat(al.refresh(), is(true));
+               when(futureMock.get(1)).thenReturn(false);
+               assertThat(al.refresh(), is(false));
+               String errorMessage = errStream.toString().split(": ", 2)[1];
+               assertThat(errorMessage, is("Error reading location information from " + uriString + ": 0 null\n \n"));
        }
 
 }
diff --git a/cadi/aaf/src/test/java/org/onap/aaf/cadi/aaf/v2_0/test/JU_AbsAAFLocator.java b/cadi/aaf/src/test/java/org/onap/aaf/cadi/aaf/v2_0/test/JU_AbsAAFLocator.java
new file mode 100644 (file)
index 0000000..e9c74cb
--- /dev/null
@@ -0,0 +1,193 @@
+/**
+ * ============LICENSE_START====================================================
+ * org.onap.aaf
+ * ===========================================================================
+ * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * ===========================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+ *
+ */
+
+package org.onap.aaf.cadi.aaf.v2_0.test;
+
+import static org.junit.Assert.*;
+import static org.hamcrest.CoreMatchers.*;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.*;
+import org.junit.*;
+import org.mockito.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.onap.aaf.cadi.Access;
+import org.onap.aaf.cadi.Locator.Item;
+import org.onap.aaf.cadi.LocatorException;
+import org.onap.aaf.cadi.PropAccess;
+import org.onap.aaf.cadi.aaf.v2_0.AbsAAFLocator;
+import org.onap.aaf.cadi.aaf.v2_0.AbsAAFLocator.LocatorCreator;
+import org.onap.aaf.cadi.config.Config;
+import org.onap.aaf.misc.env.impl.BasicTrans;
+
+public class JU_AbsAAFLocator {
+
+       @Mock private LocatorCreator locatorCreatorMock;
+
+       private PropAccess access;
+       private URI uri;
+
+       private static final String uriString = "example.com";
+
+       @Before
+       public void setup() throws URISyntaxException {
+               MockitoAnnotations.initMocks(this);
+
+               access = new PropAccess(new PrintStream(new ByteArrayOutputStream()), new String[0]);
+               access.setProperty(Config.CADI_LATITUDE, "38.62");  // St Louis approx lat
+               access.setProperty(Config.CADI_LONGITUDE, "90.19");  // St Louis approx lon
+
+               uri = new URI(uriString);
+       }
+
+       @AfterClass
+       public static void tearDownAfterClass() throws Exception {
+               AbsAAFLocator.setCreator(null);
+       }
+
+       @Test
+       public void test() throws LocatorException {
+               AAFLocatorStub loc;
+
+               // Test with http
+               loc = new AAFLocatorStub(access, "httpname");
+               assertThat(loc.getName(), is("httpname"));
+               assertThat(loc.getVersion(), is(Config.AAF_DEFAULT_VERSION));
+               assertThat(loc.toString(), is("AAFLocator for " + "httpname" + " on " + loc.getURI()));
+
+               loc = new AAFLocatorStub(access, "name");
+               assertThat(loc.getName(), is("name"));
+               assertThat(loc.getVersion(), is(Config.AAF_DEFAULT_VERSION));
+               loc = new AAFLocatorStub(access, "name:v2.0");
+               assertThat(loc.getName(), is("name"));
+               assertThat(loc.getVersion(), is("v2.0"));
+       }
+
+       @Test
+       public void createTest() throws LocatorException {
+               AbsAAFLocator.setCreator(locatorCreatorMock);
+
+               assertThat(AbsAAFLocator.create("nonsense"), is(nullValue()));
+               assertThat(AbsAAFLocator.create("nonsense/locate"), is(nullValue()));
+               assertThat(AbsAAFLocator.create("nonsense/locate/"), is(nullValue()));
+               assertThat(AbsAAFLocator.create("nonsense/locate//"), is(nullValue()));
+               assertThat(AbsAAFLocator.create("nonsense/locate/name:v2.0"), is(nullValue()));
+
+               assertThat(AbsAAFLocator.create("http/locate/name:v2.0"), is(nullValue()));
+
+               doReturn(mock(AbsAAFLocator.class)).when(locatorCreatorMock).create(anyString(), anyString());
+               assertThat(AbsAAFLocator.create("http/locate/name:v2.0/path"), is(not(nullValue())));
+
+               AbsAAFLocator.setCreator(null);
+               assertThat(AbsAAFLocator.create("http/locate/name:v2.0"), is(nullValue()));
+
+               assertThat(AbsAAFLocator.create("http"), is(not(nullValue())));
+
+               AbsAAFLocator.setCreator(locatorCreatorMock);
+               assertThat(AbsAAFLocator.create("first", "second"), is(not(nullValue())));
+       }
+
+       @Test
+       public void nameFromLocatorURITest() throws LocatorException, URISyntaxException {
+               AAFLocatorStub loc = new AAFLocatorStub(access, "name:v2.0");
+               assertThat(loc.getNameFromURI(new URI("example.com")), is("example.com"));
+               assertThat(loc.getNameFromURI(new URI("example.com/extra/stuff")), is("example.com/extra/stuff"));
+               assertThat(loc.getNameFromURI(new URI("example.com/locate/stuff")), is("stuff")); // n' stuff
+       }
+
+       @Test
+       public void setSelfTest() throws LocatorException {
+               AbsAAFLocator.setCreatorSelf("host", 8000);
+               AbsAAFLocator.setCreator(null);
+               AbsAAFLocator.setCreatorSelf("host", 8000);
+               (new AAFLocatorStub(access, "name:v2.0")).setSelf("host", 8000);  // oof
+       }
+
+       @Test
+       public void coverage() throws LocatorException {
+               AAFLocatorStub loc = new AAFLocatorStub(access, "name:v2.0");
+               assertThat(loc.get(null), is(nullValue()));
+
+               try {
+                       loc.get(mock(Item.class));
+                       fail("Should've thrown an exception");
+               } catch (Exception e) {
+               }
+
+               try {
+                       loc.invalidate(mock(Item.class));
+                       fail("Should've thrown an exception");
+               } catch (Exception e) {
+               }
+
+               try {
+                       loc.best();
+                       fail("Should've thrown an exception");
+               } catch (Exception e) {
+               }
+
+               assertThat(loc.first(), is(nullValue()));
+
+               assertThat(loc.hasItems(), is(false));
+               assertThat(loc.next(null), is(nullValue()));
+
+               try {
+                       loc.next(mock(Item.class));
+                       fail("Should've thrown an exception");
+               } catch (Exception e) {
+               }
+
+               loc.destroy();
+
+
+               assertThat(loc.exposeGetURI(uri), is(uri));
+
+               assertThat(loc.setPathInfo("pathInfo"), is(not(nullValue())));
+               assertThat(loc.setQuery("query"), is(not(nullValue())));
+               assertThat(loc.setFragment("fragment"), is(not(nullValue())));
+               
+               assertThat(loc.exposeGetURI(uri), is(not(uri)));
+       }
+
+
+       @Test(expected = LocatorException.class)
+       public void throwsTest() throws LocatorException {
+               @SuppressWarnings("unused")
+               AAFLocatorStub loc = new AAFLocatorStub(new PropAccess(), "name");
+       }
+
+       private class AAFLocatorStub extends AbsAAFLocator<BasicTrans> {
+               public AAFLocatorStub(Access access, String name) throws LocatorException {
+                       super(access, name, 10000L);
+               }
+               @Override public boolean refresh() { return false; }
+               @Override protected URI getURI() { return uri; }
+               public String getName() { return name; }
+               public String getVersion() { return version; }
+               public String getNameFromURI(URI uri) { return nameFromLocatorURI(uri); }
+               public URI exposeGetURI(URI uri) throws LocatorException { return super.getURI(uri); }
+       }
+
+}
index 13df1ac..a4fb20f 100644 (file)
@@ -30,9 +30,11 @@ import java.io.FileReader;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.lang.reflect.Field;
 import java.net.HttpURLConnection;
 import java.security.Principal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Properties;
 
@@ -43,6 +45,7 @@ import org.onap.aaf.cadi.aaf.v2_0.AAFConHttp;
 import org.onap.aaf.cadi.aaf.v2_0.AAFLurPerm;
 import org.onap.aaf.cadi.aaf.v2_0.AAFTaf;
 import org.onap.aaf.cadi.config.Config;
+import org.onap.aaf.cadi.config.SecurityInfoC;
 import org.onap.aaf.cadi.locator.DNSLocator;
 import org.onap.aaf.cadi.principal.CachedBasicPrincipal;
 
@@ -143,6 +146,13 @@ public class JU_JMeter {
                
        };
        
+       @AfterClass
+       public static void tearDownAfterClass() throws Exception {
+               Field field = SecurityInfoC.class.getDeclaredField("sicMap");
+               field.setAccessible(true);
+               field.set(null, new HashMap<Class<?>,SecurityInfoC<?>>());
+       }
+       
        private static int index = -1;
        
        private synchronized Principal getIndex() {
index 8d43c1b..a30f274 100644 (file)
@@ -23,9 +23,11 @@ package org.onap.aaf.cadi.oauth.test;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
+import java.lang.reflect.Field;
 import java.net.ConnectException;
 import java.util.Date;
 import java.util.GregorianCalendar;
+import java.util.HashMap;
 
 import org.junit.After;
 import org.junit.AfterClass;
@@ -39,6 +41,7 @@ import org.onap.aaf.cadi.client.Rcli;
 import org.onap.aaf.cadi.client.Result;
 import org.onap.aaf.cadi.client.Retryable;
 import org.onap.aaf.cadi.config.Config;
+import org.onap.aaf.cadi.config.SecurityInfoC;
 import org.onap.aaf.cadi.oauth.TimedToken;
 import org.onap.aaf.cadi.oauth.TokenClient;
 import org.onap.aaf.cadi.oauth.TokenClientFactory;
@@ -74,6 +77,9 @@ public class JU_OAuthTest {
 
        @AfterClass
        public static void tearDownAfterClass() throws Exception {
+               Field field = SecurityInfoC.class.getDeclaredField("sicMap");
+               field.setAccessible(true);
+               field.set(null, new HashMap<Class<?>,SecurityInfoC<?>>());
        }
 
        @Before
index 21012e6..e997378 100644 (file)
@@ -23,25 +23,16 @@ package org.onap.aaf.content;
 
 import java.io.StringReader;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.*;
 import org.onap.aaf.misc.rosetta.env.RosettaDF;
 import org.onap.aaf.misc.rosetta.env.RosettaData;
 import org.onap.aaf.misc.rosetta.env.RosettaEnv;
 
 import aaf.v2_0.Error;
 
-public class JU_Content {
-
-       @BeforeClass
-       public static void setUpBeforeClass() throws Exception {
-       }
-
-       @AfterClass
-       public static void tearDownAfterClass() throws Exception {
-       }
+// TODO: This test doesn't really do anything. It should be deleted as soon as coverage is above 50%
 
+public class JU_Content {
 
        @Test
        public void parseErrorJSON() throws Exception {
@@ -70,11 +61,15 @@ public class JU_Content {
                errDF.out(RosettaData.TYPE.JSON);
                RosettaData<Error> data = errDF.newData();
                data.load(err);
-               System.out.println(data.asString());
+               
+               @SuppressWarnings("unused")
+               String output = data.asString();
+//             System.out.println(output);
                
                data.load(new StringReader(msg));
                err = data.asObject();
-               System.out.println(err.getText());
+               output = err.getText();
+//             System.out.println(output);
        }