aboutsummaryrefslogtreecommitdiffstats
path: root/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test
diff options
context:
space:
mode:
Diffstat (limited to 'cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test')
-rw-r--r--cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_Get.java107
-rw-r--r--cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_GetAccess.java105
-rw-r--r--cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_MapBathConverter.java248
-rw-r--r--cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_MultiGet.java68
-rw-r--r--cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_RegistrationPropHolder.java149
-rw-r--r--cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_SecurityInfo.java136
-rw-r--r--cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_SecurityInfoC.java110
-rw-r--r--cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_UsersDump.java145
8 files changed, 1068 insertions, 0 deletions
diff --git a/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_Get.java b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_Get.java
new file mode 100644
index 00000000..017d86e7
--- /dev/null
+++ b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_Get.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * * org.onap.ccsdk
+ * * ===========================================================================
+ * * Copyright © 2023 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.ccsdk.apps.cadi.config.test;
+
+import static org.junit.Assert.*;
+import static org.hamcrest.CoreMatchers.*;
+import org.junit.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import org.onap.ccsdk.apps.cadi.PropAccess;
+import org.onap.ccsdk.apps.cadi.config.Get;
+
+public class JU_Get {
+
+ private String defaultVal = "some default value";
+
+ private ByteArrayOutputStream outStream;
+
+ private TestBean tb;
+
+ @Before
+ public void setup() {
+ outStream = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(outStream));
+ }
+
+ @After
+ public void tearDown() {
+ System.setOut(System.out);
+ }
+
+ @Test
+ public void beanTest() {
+ tb = new TestBean();
+ tb.setProperty1("prop1");
+
+ Get.Bean testBean = new Get.Bean(tb);
+ assertThat(testBean.get("property1", defaultVal, true), is("prop1"));
+ assertThat(testBean.get("property2", defaultVal, true), is(defaultVal));
+ assertThat(testBean.get("thrower", defaultVal, true), is(defaultVal));
+ }
+
+ @Test
+ public void nullTest() {
+ assertThat(Get.NULL.get("name", defaultVal, true), is(defaultVal));
+ }
+
+ @Test
+ public void accessTest() {
+
+ PropAccess access = new PropAccess();
+ access.setProperty("tag", "value");
+ Get.AccessGet accessGet = new Get.AccessGet(access);
+
+ assertThat(accessGet.get("tag", defaultVal, true), is("value"));
+ outStream.reset();
+
+ assertThat(accessGet.get("not a real tag", defaultVal, true), is(defaultVal));
+ outStream.reset();
+
+ assertThat(accessGet.get("not a real tag", null, true), is(nullValue()));
+
+ outStream.reset();
+
+ assertThat(accessGet.get("tag", defaultVal, false), is("value"));
+ assertThat(outStream.toString(), is(""));
+ }
+
+ public class TestBean implements java.io.Serializable {
+
+ private static final long serialVersionUID = 1L;
+ private String property1 = null;
+ private String property2 = null;
+ @SuppressWarnings("unused")
+ private String thrower = null;
+
+ public TestBean() { }
+ public String getProperty1() { return property1; }
+ public void setProperty1(final String value) { this.property1 = value; }
+ public String getProperty2() { return property2; }
+ public void setProperty2(final String value) { this.property2 = value; }
+ public String getThrower() throws Exception { throw new Exception(); }
+ public void setThrower(final String value) { this.thrower = value; }
+
+ }
+}
diff --git a/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_GetAccess.java b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_GetAccess.java
new file mode 100644
index 00000000..309810af
--- /dev/null
+++ b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_GetAccess.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * * org.onap.ccsdk
+ * * ===========================================================================
+ * * Copyright © 2023 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.ccsdk.apps.cadi.config.test;
+
+import static org.junit.Assert.*;
+import static org.hamcrest.CoreMatchers.*;
+import org.junit.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import org.onap.ccsdk.apps.cadi.PropAccess;
+import org.onap.ccsdk.apps.cadi.config.Get;
+import org.onap.ccsdk.apps.cadi.config.GetAccess;
+
+public class JU_GetAccess {
+
+ private String defaultVal = "some default value";
+
+ private ByteArrayOutputStream outStream;
+
+ private PropAccess access;
+ private Get.AccessGet accessGet;
+ private File file;
+ private String filePath;
+
+ @Before
+ public void setup() throws IOException {
+ outStream = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(outStream));
+
+ file = File.createTempFile("GetAccess_test", "");
+ filePath = file.getAbsolutePath();
+
+ access = new PropAccess();
+ access.setProperty("cadi_prop_files", filePath);
+ accessGet = new Get.AccessGet(access);
+
+ }
+
+ @After
+ public void tearDown() {
+ System.setOut(System.out);
+
+ file.delete();
+ }
+
+ @Test
+ public void constructorTest() {
+ String output;
+
+ @SuppressWarnings("unused")
+ GetAccess getAccess = new GetAccess(accessGet);
+ String[] lines = outStream.toString().split(System.lineSeparator());
+ assertThat(lines.length, is(5));
+ output = lines[0].split(" ", 2)[1];
+
+ }
+
+ @Test
+ public void getPropertyTest1() {
+ GetAccess getAccess = new GetAccess(accessGet);
+
+ getAccess.setProperty("tag", "value");
+ assertThat(getAccess.getProperty("tag", defaultVal), is("value"));
+ assertThat(getAccess.getProperty("not_a_tag", defaultVal), is(defaultVal));
+ }
+
+ @Test
+ public void getPropertyTest2() {
+ GetAccess getAccess = new GetAccess(accessGet);
+
+ getAccess.setProperty("tag", "value");
+ assertThat(getAccess.getProperty("tag"), is("value"));
+ assertThat(getAccess.getProperty("not_a_tag"), is(nullValue()));
+ }
+
+ @Test
+ public void getTest() {
+ GetAccess getAccess = new GetAccess(accessGet);
+ assertThat((Get.AccessGet)getAccess.get(), is(accessGet));
+ }
+
+}
diff --git a/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_MapBathConverter.java b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_MapBathConverter.java
new file mode 100644
index 00000000..4be77623
--- /dev/null
+++ b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_MapBathConverter.java
@@ -0,0 +1,248 @@
+/**
+ * ============LICENSE_START====================================================
+ * org.onap.ccsdk
+ * ===========================================================================
+ * Copyright (c) 2023 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.ccsdk.apps.cadi.config.test;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.GregorianCalendar;
+import java.util.Iterator;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.ccsdk.apps.cadi.Access;
+import org.onap.ccsdk.apps.cadi.CadiException;
+import org.onap.ccsdk.apps.cadi.PropAccess;
+import org.onap.ccsdk.apps.cadi.Symm;
+import org.onap.ccsdk.apps.cadi.filter.MapBathConverter;
+import org.onap.ccsdk.apps.cadi.util.CSV;
+import org.onap.ccsdk.apps.cadi.util.CSV.Visitor;
+import org.onap.ccsdk.apps.cadi.util.CSV.Writer;
+
+import junit.framework.Assert;
+
+/**
+ * Test a simple Migration conversion tool for CADI
+ *
+ * @author Instrumental(Jonathan)
+ *
+ */
+public class JU_MapBathConverter {
+ private static final String NEW_USER_SOMETHING_ORG = "NEW_USER@Something.org";
+ private static final String OLD_ID = "OLD_ID";
+ private static final String SHARED_PASS = "SHARED_PASS";
+ private static CSV csv;
+ private static ArrayList<String> expected;
+ private static final Access access = new PropAccess();
+ private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+ @BeforeClass
+ public static void createFile() throws IOException {
+ // Note, you cate a "MapBathConverter" by access to a File.
+ // We will create that file now. Local is fine.
+ csv = new CSV(access,"JU_MapBathConverter.csv");
+ }
+
+ @BeforeClass
+ public static void beforeClass() {
+ expected = new ArrayList<>();
+ }
+
+ @Before
+ public void before() {
+ expected.clear();
+ }
+
+ @Test
+ public void test() throws IOException, CadiException {
+ CSV.Writer cw = csv.writer();
+ GregorianCalendar gc = new GregorianCalendar();
+ gc.add(GregorianCalendar.MONTH, 6);
+ try {
+ try {
+ // CSV can simply be OLD ID and NEW, no passwords
+ cw.row(exp(OLD_ID), exp(NEW_USER_SOMETHING_ORG),sdf.format(gc.getTime()));
+
+ // Style 1 - Incoming ID/pass, create new cred with NweID and same Pass
+ cw.row(exp(bath(OLD_ID,SHARED_PASS)), exp(NEW_USER_SOMETHING_ORG),sdf.format(gc.getTime()));
+ // the response should be Basic with NEW_ID and OLD_PASS
+
+ // Style 2
+ cw.row(exp(bath(OLD_ID,"OLD_PASS")), exp(bath(NEW_USER_SOMETHING_ORG,"NEW_PASS")),sdf.format(gc.getTime()));
+
+ } finally {
+ cw.close();
+ }
+
+ final Iterator<String> exp = expected.iterator();
+ csv.visit(new Visitor() {
+ @Override
+ public void visit(List<String> row) {
+ int i=0;
+ for(String s : row) {
+ switch(i++) {
+ case 0:
+ case 1:
+ Assert.assertEquals(exp.next(), s);
+ break;
+ case 2:
+ try {
+ Date.valueOf(s);
+ } catch (Exception e) {
+ Assert.assertTrue("Last entry should be a date",false);
+ }
+ break;
+ default:
+ Assert.fail("There should only be 3 columns in this test case.");
+ }
+ }
+ }
+ });
+
+ MapBathConverter mbc = new MapBathConverter(access, csv);
+
+ // Check no lookup just returns the same
+ Assert.assertEquals("NonKey", "NonKey"); // if not in map, expect same value
+
+ Iterator<String> exp1 = expected.iterator();
+ // there's no passwords in CSV
+ String old = exp1.next();
+ String nw = exp1.next();
+ Assert.assertEquals(nw, mbc.convert(access,old));
+
+ Assert.assertEquals(bath(NEW_USER_SOMETHING_ORG,SHARED_PASS), mbc.convert(access,bath(OLD_ID,SHARED_PASS)));
+
+ // Style 1 (new cred, old password)
+ old = exp1.next();
+ nw = bath(exp1.next(),SHARED_PASS);
+ Assert.assertEquals(nw, mbc.convert(access,old));
+
+ // Style 2
+ old = exp1.next();
+ nw = exp1.next();
+ Assert.assertEquals(nw, mbc.convert(access,old));
+
+ } finally {
+ csv.delete();
+ }
+ }
+
+ @Test
+ public void testInsecureRole() throws IOException {
+ CSV.Writer cw = csv.writer();
+ GregorianCalendar gc = new GregorianCalendar();
+ gc.add(GregorianCalendar.MONTH, 6);
+ try {
+ try {
+ // Invalid Scenario - Non Authenticated ID to authenticated User
+ cw.row(exp(OLD_ID), exp(bath(NEW_USER_SOMETHING_ORG,"NEW_PASS")),sdf.format(gc.getTime()));
+
+ } finally {
+ cw.close();
+ }
+
+ try {
+ new MapBathConverter(access, csv);
+ Assert.fail("Invalid Data should throw Exception");
+ } catch (CadiException e) {
+ Assert.assertTrue("Invalid Data should throw Exception",true);
+ }
+
+ } finally {
+ csv.delete();
+ }
+ }
+
+ @Test
+ public void testTooFewColumns() throws IOException, CadiException {
+ CSV.Writer cw = csv.writer();
+ try {
+ try {
+ cw.row(exp(bath(OLD_ID,"OLD_PASS")), exp(bath(NEW_USER_SOMETHING_ORG,"NEW_PASS")));
+ } finally {
+ cw.close();
+ }
+
+ try {
+ new MapBathConverter(access, csv);
+ Assert.fail("file with too few rows should throw exception");
+ } catch(CadiException | IOException e) {
+ Assert.assertTrue("Correctly thrown Exception",true);
+ }
+ } finally {
+ csv.delete();
+ }
+ }
+
+ @Test
+ public void testNoFile() {
+ try {
+ new MapBathConverter(access, new CSV(access,"Bogus"));
+ Assert.fail("Non Existent File should throw exception");
+ } catch(CadiException | IOException e) {
+ Assert.assertTrue("Correctly thrown Exception",true);
+ }
+ }
+
+ @Test
+ public void testBadRows() throws IOException {
+ try {
+ Writer cw = csv.writer();
+ try {
+ cw.row("Single Column");
+ } finally {
+ cw.close();
+ }
+
+ try {
+ new MapBathConverter(access,csv);
+ Assert.fail("Non Existent File should throw exception");
+ } catch(CadiException | IOException e) {
+ Assert.assertTrue("Correctly thrown Exception",true);
+ }
+ } finally {
+ csv.delete();
+ }
+
+ // Check for deletion
+ Assert.assertFalse(csv.toString() + "should have been deleted",new File(csv.toString()).exists());
+ }
+
+ private String bath(String user, String password) throws IOException {
+ StringBuilder sb = new StringBuilder(user);
+ sb.append(':');
+ sb.append(password);
+ byte[] encoded = Symm.base64noSplit.encode(sb.toString().getBytes());
+ sb.setLength(0);
+ sb.append("Basic ");
+ sb.append(new String(encoded));
+ return sb.toString();
+ }
+
+ private String exp(String s) {
+ expected.add(s);
+ return s;
+ }
+}
diff --git a/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_MultiGet.java b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_MultiGet.java
new file mode 100644
index 00000000..ccaf3596
--- /dev/null
+++ b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_MultiGet.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * * org.onap.ccsdk
+ * * ===========================================================================
+ * * Copyright © 2023 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.ccsdk.apps.cadi.config.test;
+
+import static org.junit.Assert.*;
+import static org.hamcrest.CoreMatchers.*;
+import org.junit.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import org.onap.ccsdk.apps.cadi.PropAccess;
+import org.onap.ccsdk.apps.cadi.config.Get;
+import org.onap.ccsdk.apps.cadi.config.MultiGet;
+
+public class JU_MultiGet {
+
+ private String defaultVal = "some default value";
+
+ private ByteArrayOutputStream outStream;
+
+ private MultiGet multiGet;
+ private Get.AccessGet accessGet;
+ private PropAccess access;
+
+ @Before
+ public void setup() throws IOException {
+ outStream = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(outStream));
+
+ access = new PropAccess();
+ access.setProperty("tag", "value");
+ accessGet = new Get.AccessGet(access);
+ multiGet = new MultiGet(accessGet, Get.NULL);
+ }
+
+ @After
+ public void tearDown() {
+ System.setOut(System.out);
+ }
+
+ @Test
+ public void getTest() {
+ assertThat(multiGet.get("tag", defaultVal, false), is("value"));
+ assertThat(multiGet.get("not_a_tag", defaultVal, false), is(defaultVal));
+ }
+
+}
diff --git a/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_RegistrationPropHolder.java b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_RegistrationPropHolder.java
new file mode 100644
index 00000000..6a51815e
--- /dev/null
+++ b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_RegistrationPropHolder.java
@@ -0,0 +1,149 @@
+/**
+ * ============LICENSE_START====================================================
+ * org.onap.ccsdk
+ * ===========================================================================
+ * Copyright (c) 2023 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.ccsdk.apps.cadi.config.test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.net.UnknownHostException;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.onap.ccsdk.apps.cadi.CadiException;
+import org.onap.ccsdk.apps.cadi.PropAccess;
+import org.onap.ccsdk.apps.cadi.config.Config;
+import org.onap.ccsdk.apps.cadi.config.RegistrationPropHolder;
+
+public class JU_RegistrationPropHolder {
+
+ @Test
+ public void testBlank() {
+ PropAccess pa = new PropAccess();
+ RegistrationPropHolder rph;
+ int ju_port = 20;
+ try {
+ ////////////////
+ // Check Required Properties
+ ////////////////
+ try {
+ rph = new RegistrationPropHolder(pa,20);
+ } catch (CadiException e) {
+ Assert.assertEquals(
+ "\ncadi_latitude must be defined." +
+ "\ncadi_longitude must be defined.",e.getMessage());
+ }
+
+ try {
+ pa.setProperty(Config.CADI_LATITUDE, "32.7");
+ rph = new RegistrationPropHolder(pa,20);
+ } catch (CadiException e) {
+ Assert.assertEquals(
+ "\ncadi_longitude must be defined.",e.getMessage());
+ }
+
+ pa.setProperty(Config.CADI_LONGITUDE, "-72.0");
+ rph = new RegistrationPropHolder(pa,ju_port);
+
+ ////////////////
+ // Validate Default Properties
+ ////////////////
+ for(String dot_le : new String[] {"",".helm"}) {
+ assertEquals(rph.hostname,rph.default_fqdn);
+ assertEquals("",rph.lcontainer);
+ assertEquals(rph.hostname,rph.public_fqdn);
+ assertEquals(ju_port,rph.getEntryPort(dot_le));
+ assertEquals(rph.hostname,rph.getEntryFQDN("",dot_le));
+ }
+
+ String ns = "myns";
+ pa.setProperty(Config.AAF_LOCATOR_APP_NS, ns);
+ for(String dot_le : new String[] {"",".helm"}) {
+ assertEquals(rph.hostname,rph.default_fqdn);
+ assertEquals("",rph.lcontainer);
+ assertEquals(rph.hostname,rph.public_fqdn);
+ assertEquals(ju_port,rph.getEntryPort(dot_le));
+ assertEquals(rph.hostname,rph.getEntryFQDN("",dot_le));
+ }
+
+ String ns2 = "onap";
+ pa.setProperty(Config.AAF_LOCATOR_APP_NS+".helm", ns2);
+ for(String dot_le : new String[] {"",".helm"}) {
+ assertEquals(rph.hostname,rph.default_fqdn);
+ assertEquals("",rph.lcontainer);
+ assertEquals(rph.hostname,rph.public_fqdn);
+ assertEquals(ju_port,rph.getEntryPort(dot_le));
+ assertEquals(rph.hostname,rph.getEntryFQDN("",dot_le));
+ }
+
+ ////////////////
+ // Validate Public Host and Port settings
+ ////////////////
+ String public_hostname = "com.public.hostname";
+ int public_port = 999;
+ pa.setProperty(Config.AAF_LOCATOR_PUBLIC_FQDN, public_hostname);
+ pa.setProperty(Config.AAF_LOCATOR_PUBLIC_PORT,Integer.toString(public_port));
+ RegistrationPropHolder pubRPH = new RegistrationPropHolder(pa,ju_port);
+ assertEquals(public_hostname,pubRPH.public_fqdn);
+ assertEquals(public_port,pubRPH.getEntryPort(""));
+
+
+ final String url = "https://aaf.osaaf.org:8095/org.osaaf.aaf.service:2.1";
+ String name="theName";
+ assertEquals(url,rph.replacements(getClass().getSimpleName(),url, name, ""));
+
+ String alu = "aaf.osaaf.org:8095";
+ String curl = url.replace(alu, Config.AAF_LOCATE_URL_TAG);
+ pa.setProperty(Config.AAF_LOCATE_URL,"https://"+alu);
+ assertEquals(url.replace("8095","8095/locate"),rph.replacements(getClass().getSimpleName(),curl, name, ""));
+
+ String root_ns = "org.osaaf.aaf";
+ curl = url.replace(root_ns, "AAF_NS");
+ pa.setProperty(Config.AAF_ROOT_NS,root_ns);
+ assertEquals(url,rph.replacements(getClass().getSimpleName(),curl, name, ""));
+
+ curl = url.replace(root_ns, "%AAF_NS");
+ pa.setProperty(Config.AAF_ROOT_NS,root_ns);
+ assertEquals(url,rph.replacements(getClass().getSimpleName(),curl, name, ""));
+
+ final String fqdn = "%C.%CNS.%NS.%N";
+ String target = "myns.theName";
+ assertEquals(target,rph.replacements(getClass().getSimpleName(),fqdn, name, ""));
+
+ pa.setProperty(Config.AAF_LOCATOR_CONTAINER_NS+".hello", "mycontns");
+ target = "mycontns.myns.theName";
+ assertEquals(target,rph.replacements(getClass().getSimpleName(),fqdn, name, ".hello"));
+
+ pa.setProperty(Config.AAF_LOCATOR_CONTAINER+".hello","helloC");
+ target = "helloC.mycontns.myns.theName";
+ assertEquals(target,rph.replacements(getClass().getSimpleName(),fqdn, name, ".hello"));
+
+ pa.setProperty(Config.AAF_LOCATOR_CONTAINER_NS,"c_ns");
+ target = "c_ns.myns.theName";
+ assertEquals(target,rph.replacements(getClass().getSimpleName(),fqdn, name, ""));
+
+
+ } catch (UnknownHostException | CadiException e) {
+ e.printStackTrace();
+ Assert.fail();
+ }
+ }
+
+
+}
diff --git a/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_SecurityInfo.java b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_SecurityInfo.java
new file mode 100644
index 00000000..99a57e32
--- /dev/null
+++ b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_SecurityInfo.java
@@ -0,0 +1,136 @@
+/**
+ * ============LICENSE_START====================================================
+ * org.onap.ccsdk
+ * ===========================================================================
+ * Copyright (c) 2023 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.ccsdk.apps.cadi.config.test;
+
+
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+
+import org.onap.ccsdk.apps.cadi.CadiException;
+import org.onap.ccsdk.apps.cadi.PropAccess;
+import org.onap.ccsdk.apps.cadi.config.Config;
+import org.onap.ccsdk.apps.cadi.config.SecurityInfo;
+
+public class JU_SecurityInfo {
+
+ private static PropAccess access;
+
+ private static final String keyStoreFileName = "src/test/resources/keystore.p12";
+ private static final String keyStorePassword = "Password for the keystore";
+ private static final String keyPassword = "Password for the key";
+
+ private static final String trustStoreFileName = "src/test/resources/truststore.jks";
+ private static final String trustStorePasswd = "Password for the truststore";
+
+ @BeforeClass
+ public static void setupOnce() throws NoSuchAlgorithmException, CertificateException, IOException, KeyStoreException {
+ KeyStore keyStore = KeyStore.getInstance("PKCS12");
+ keyStore.load(null, null);
+ keyStore.store(new FileOutputStream(keyStoreFileName), keyStorePassword.toCharArray());
+
+ KeyStore trustStore = KeyStore.getInstance("JKS");
+ trustStore.load(null, null);
+ trustStore.store(new FileOutputStream(trustStoreFileName), trustStorePasswd.toCharArray());
+ }
+
+ @Before
+ public void setup() throws IOException {
+ access = new PropAccess(new PrintStream(new ByteArrayOutputStream()), new String[0]);
+
+ access.setProperty(Config.CADI_KEYSTORE, keyStoreFileName);
+ access.setProperty(Config.CADI_KEYSTORE_PASSWORD, access.encrypt(keyStorePassword));
+ access.setProperty(Config.CADI_KEY_PASSWORD, access.encrypt(keyPassword));
+
+ access.setProperty(Config.CADI_TRUSTSTORE, trustStoreFileName);
+ access.setProperty(Config.CADI_TRUSTSTORE_PASSWORD, access.encrypt(trustStorePasswd));
+ }
+
+ @AfterClass
+ public static void tearDownOnce() {
+ File keyStoreFile = new File(keyStoreFileName);
+ if (keyStoreFile.exists()) {
+ keyStoreFile.delete();
+ }
+ File trustStoreFile = new File(trustStoreFileName);
+ if (trustStoreFile.exists()) {
+ trustStoreFile.delete();
+ }
+ }
+
+ @Test
+ public void test() throws CadiException {
+ SecurityInfo si = new SecurityInfo(access);
+
+ assertNotNull(si.getSSLSocketFactory());
+ assertNotNull(si.getSSLContext());
+ assertNotNull(si.getKeyManagers());
+
+ access.setProperty(Config.CADI_TRUST_MASKS, "123.123.123.123");
+ si = new SecurityInfo(access);
+ }
+
+ @Test(expected = CadiException.class)
+ public void nullkeyStoreTest() throws CadiException {
+ access.setProperty(Config.CADI_KEYSTORE, "passwords.txt");
+ @SuppressWarnings("unused")
+ SecurityInfo si = new SecurityInfo(access);
+ }
+
+ @Test(expected = CadiException.class)
+ public void nullTrustStoreTest() throws CadiException {
+ access.setProperty(Config.CADI_TRUSTSTORE, "passwords.txt");
+ @SuppressWarnings("unused")
+ SecurityInfo si = new SecurityInfo(access);
+ }
+
+
+ @Test(expected = NumberFormatException.class)
+ public void badTrustMaskTest() throws CadiException {
+ access.setProperty(Config.CADI_TRUST_MASKS, "trustMask");
+ @SuppressWarnings("unused")
+ SecurityInfo si = new SecurityInfo(access);
+ }
+
+ @Test
+ public void coverageTest() throws CadiException {
+ PropAccess badAccess = new PropAccess(new PrintStream(new ByteArrayOutputStream()), new String[0]);
+ @SuppressWarnings("unused")
+ SecurityInfo si = new SecurityInfo(badAccess);
+ badAccess.setProperty(Config.CADI_KEYSTORE, keyStoreFileName);
+ si = new SecurityInfo(badAccess);
+ }
+
+}
diff --git a/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_SecurityInfoC.java b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_SecurityInfoC.java
new file mode 100644
index 00000000..e726c9f0
--- /dev/null
+++ b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_SecurityInfoC.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * ============LICENSE_START====================================================
+ * * org.onap.ccsdk
+ * * ===========================================================================
+ * * Copyright © 2023 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.ccsdk.apps.cadi.config.test;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.junit.*;
+import org.onap.ccsdk.apps.cadi.CadiException;
+import org.onap.ccsdk.apps.cadi.PropAccess;
+import org.onap.ccsdk.apps.cadi.SecuritySetter;
+import org.onap.ccsdk.apps.cadi.config.SecurityInfoC;
+
+public class JU_SecurityInfoC {
+
+ ByteArrayOutputStream outStream;
+ ByteArrayOutputStream errStream;
+
+ @Before
+ public void setup() {
+ outStream = new ByteArrayOutputStream();
+ errStream = new ByteArrayOutputStream();
+
+ System.setOut(new PrintStream(outStream));
+ System.setErr(new PrintStream(errStream));
+ }
+
+ @After
+ public void tearDown() {
+ System.setOut(System.out);
+ System.setErr(System.err);
+ }
+
+// @Test
+// public void instanceTest() throws CadiException, MalformedURLException {
+// SecurityInfoC<HttpURLConnection> si = SecurityInfoC.instance(new PropAccess(), HttpURLConnection.class );
+// assertThat(si.defSS.getID(), is(SecurityInfoC.DEF_ID));
+// try {
+// si.defSS.setSecurity(new HttpURLConnectionStub());
+// fail("Should have thrown an exception");
+// } catch (CadiException e) {
+// assertTrue(e instanceof CadiException);
+// assertThat(e.getMessage(), is("No Client Credentials set."));
+// }
+// assertThat(si.defSS.setLastResponse(0), is(0));
+//
+// // Try it again for coverage
+// SecurityInfoC<HttpURLConnection> siClone = SecurityInfoC.instance(new PropAccess(), HttpURLConnection.class);
+// assertThat(siClone, is(si));
+// }
+
+ @Test
+ public void setTest() throws MalformedURLException, CadiException {
+ SecurityInfoC<HttpURLConnectionStub> si = SecurityInfoC.instance(new PropAccess(), HttpURLConnectionStub.class);
+ SecuritySetter<HttpURLConnectionStub> ss = new SecuritySetterStub<HttpURLConnectionStub>();
+ assertThat(si.set(ss), is(si));
+ assertThat(si.defSS.getID(), is("Example ID"));
+ try {
+ si.defSS.setSecurity(new HttpURLConnectionStub());
+ fail("Should have thrown an exception");
+ } catch (CadiException e) {
+ assertTrue(e instanceof CadiException);
+ assertThat(e.getMessage(), is("Example exception"));
+ }
+ assertThat(si.defSS.setLastResponse(0), is(0));
+ assertThat(si.defSS.setLastResponse(1), is(1));
+ assertThat(si.defSS.setLastResponse(-1), is(-1));
+ }
+
+ public static class HttpURLConnectionStub extends HttpURLConnection {
+ public HttpURLConnectionStub() throws MalformedURLException { super(new URL("http://www.example.com")); }
+ @Override public void disconnect() { }
+ @Override public boolean usingProxy() { return false; }
+ @Override public void connect() throws IOException { }
+ }
+
+ private class SecuritySetterStub<CT> implements SecuritySetter<CT> {
+ public String getID() { return "Example ID"; }
+ public void setSecurity(CT client) throws CadiException { throw new CadiException("Example exception"); }
+ public int setLastResponse(int respCode) { return respCode; }
+ }
+
+}
diff --git a/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_UsersDump.java b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_UsersDump.java
new file mode 100644
index 00000000..dfac2164
--- /dev/null
+++ b/cadi/core/src/test/java/org/onap/ccsdk/apps/cadi/config/test/JU_UsersDump.java
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * * org.onap.ccsdk
+ * * ===========================================================================
+ * * Copyright © 2023 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.ccsdk.apps.cadi.config.test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import org.onap.ccsdk.apps.cadi.AbsUserCache;
+import org.onap.ccsdk.apps.cadi.PropAccess;
+import org.onap.ccsdk.apps.cadi.config.UsersDump;
+import org.onap.ccsdk.apps.cadi.lur.LocalLur;
+import org.onap.ccsdk.apps.cadi.lur.LocalPermission;
+import org.onap.ccsdk.apps.cadi.util.Split;
+
+public class JU_UsersDump {
+
+ private ByteArrayOutputStream outStream;
+ private ByteArrayOutputStream stdoutSuppressor;
+
+ private static final String expected = "<?xml version='1.0' encoding='utf-8'?>\n" +
+ "<!--\n" +
+ " Code Generated Tomcat Users and Roles from AT&T LUR on ...\n" +
+ "-->\n" +
+ "<tomcat-users>\n" +
+ " <role rolename=\"suser\"/>\n" +
+ " <role rolename=\"admin\"/>\n" +
+ " <role rolename=\"groupB\"/>\n" +
+ " <role rolename=\"groupA\"/>\n" +
+ " \n" +
+ " <user username=\"hisname@people.osaaf.org\" roles=\"suser\"/>\n" +
+ " <user username=\"yourname@people.osaaf.org\" roles=\"admin\"/>\n" +
+ " <user username=\"myname@people.osaaf.org\" roles=\"admin\"/>\n" +
+ " <user username=\"m1234@people.osaaf.org\" roles=\"suser\"/>\n" +
+ " <user username=\"myname\" roles=\"groupB,groupA\"/>\n" +
+ " <user username=\"hername@people.osaaf.org\" roles=\"suser\"/>\n" +
+ "</tomcat-users>\n";
+
+ private final static String groups = "myname:groupA,groupB";
+ private final static String names = "admin:myname,yourname;suser:hisname,hername,m1234";
+
+ private AbsUserCache<LocalPermission> lur;
+
+ @Before
+ public void setup() throws IOException {
+ outStream = new ByteArrayOutputStream();
+ stdoutSuppressor = new ByteArrayOutputStream();
+
+ System.setOut(new PrintStream(stdoutSuppressor));
+
+ lur = new LocalLur(new PropAccess(), groups, names);
+ }
+
+ @After
+ public void tearDown() {
+ System.setOut(System.out);
+ }
+
+ @Test
+ public void writeTest() throws IOException {
+ UsersDump.write(outStream, lur);
+ String[] actualLines = Split.splitTrim('\n', outStream.toString());
+ String[] expectedLines = Split.splitTrim('\n', expected);
+ for (String s : actualLines) {
+ System.out.println(s);
+ }
+
+ assertThat(actualLines.length, is(expectedLines.length));
+
+ // Check that the output starts with an XML tag
+ assertThat(actualLines[0], is(expectedLines[0]));
+ // Check that lines 2-4 are a comment
+ assertThat(actualLines[1], is(expectedLines[1]));
+ assertThat(actualLines[3], is(expectedLines[3]));
+
+ // Check that the rest of the output matches the expected output
+ for (int i = 4; i < actualLines.length; i++) {
+ assertThat(actualLines[i], is(expectedLines[i]));
+ }
+
+ // Run the test again with outStream as a PrintStream (for coverage)
+ outStream.reset();
+ UsersDump.write(new PrintStream(outStream), lur);
+ actualLines = Split.splitTrim('\n', outStream.toString());
+
+ assertThat(actualLines.length, is(expectedLines.length));
+
+ // Check that the output starts with an XML tag
+ assertThat(actualLines[0], is(expectedLines[0]));
+ // Check that lines 2-4 are a comment
+ assertThat(actualLines[1], is(expectedLines[1]));
+ assertThat(actualLines[3], is(expectedLines[3]));
+
+ // Check that the rest of the output matches the expected output
+ for (int i = 4; i < actualLines.length; i++) {
+ assertThat(actualLines[i], is(expectedLines[i]));
+ }
+ }
+
+ @Test
+ public void updateUsersTest() {
+ String output;
+ File outputFile = new File("src/test/resources/userdump.xml");
+ assertThat(outputFile.exists(), is(false));
+
+ output = UsersDump.updateUsers("src/test/resources/userdump.xml", (LocalLur) lur);
+ assertThat(output, is(nullValue()));
+ assertThat(outputFile.exists(), is(true));
+
+ output = UsersDump.updateUsers("src/test/resources/userdump.xml", (LocalLur) lur);
+ assertThat(output, is(nullValue()));
+ assertThat(outputFile.exists(), is(true));
+
+ outputFile.delete();
+ }
+
+}