From 5de9d86fab2b8bec58bd09e95640da468d4e1f61 Mon Sep 17 00:00:00 2001 From: Manjunath Ranganathaiah Date: Tue, 10 Apr 2018 13:22:00 -0700 Subject: Add maven build structure Restructure the directories and files to accommodate maven build. This will build, test and generate jar file for clients to use. Adds a target in the top level makefile. Issue-ID: AAF-183 Change-Id: I8c27396248d83070befe51f2c6e01aed7dea9202 Signed-off-by: Manjunath Ranganathaiah --- sms-client/pom.xml | 52 +++++ sms-client/src/java/example/SmsClientExample.java | 118 ---------- sms-client/src/java/main/SmsClient.java | 256 --------------------- sms-client/src/java/main/SmsInterface.java | 90 -------- sms-client/src/java/main/SmsResponse.java | 57 ----- sms-client/src/java/test/ClientTestRunner.java | 33 --- sms-client/src/java/test/SmsCreateDomainTest.java | 46 ---- sms-client/src/java/test/SmsDeleteDomainTest.java | 43 ---- sms-client/src/java/test/SmsSecureSocket.java | 68 ------ sms-client/src/java/test/SmsTest.java | 76 ------ sms-client/src/main/example/SmsClientExample.java | 118 ++++++++++ .../src/main/java/org/onap/aaf/sms/SmsClient.java | 256 +++++++++++++++++++++ .../main/java/org/onap/aaf/sms/SmsInterface.java | 90 ++++++++ .../main/java/org/onap/aaf/sms/SmsResponse.java | 57 +++++ .../java/org/onap/aaf/sms/ClientTestRunner.java | 35 +++ .../java/org/onap/aaf/sms/SmsCreateDomainTest.java | 46 ++++ .../java/org/onap/aaf/sms/SmsDeleteDomainTest.java | 43 ++++ .../java/org/onap/aaf/sms/SmsSecureSocket.java | 68 ++++++ .../src/test/java/org/onap/aaf/sms/SmsTest.java | 77 +++++++ sms-service/src/Makefile | 8 +- 20 files changed, 848 insertions(+), 789 deletions(-) create mode 100644 sms-client/pom.xml delete mode 100644 sms-client/src/java/example/SmsClientExample.java delete mode 100644 sms-client/src/java/main/SmsClient.java delete mode 100644 sms-client/src/java/main/SmsInterface.java delete mode 100644 sms-client/src/java/main/SmsResponse.java delete mode 100644 sms-client/src/java/test/ClientTestRunner.java delete mode 100644 sms-client/src/java/test/SmsCreateDomainTest.java delete mode 100644 sms-client/src/java/test/SmsDeleteDomainTest.java delete mode 100644 sms-client/src/java/test/SmsSecureSocket.java delete mode 100644 sms-client/src/java/test/SmsTest.java create mode 100644 sms-client/src/main/example/SmsClientExample.java create mode 100644 sms-client/src/main/java/org/onap/aaf/sms/SmsClient.java create mode 100644 sms-client/src/main/java/org/onap/aaf/sms/SmsInterface.java create mode 100644 sms-client/src/main/java/org/onap/aaf/sms/SmsResponse.java create mode 100644 sms-client/src/test/java/org/onap/aaf/sms/ClientTestRunner.java create mode 100644 sms-client/src/test/java/org/onap/aaf/sms/SmsCreateDomainTest.java create mode 100644 sms-client/src/test/java/org/onap/aaf/sms/SmsDeleteDomainTest.java create mode 100644 sms-client/src/test/java/org/onap/aaf/sms/SmsSecureSocket.java create mode 100644 sms-client/src/test/java/org/onap/aaf/sms/SmsTest.java diff --git a/sms-client/pom.xml b/sms-client/pom.xml new file mode 100644 index 0000000..e060feb --- /dev/null +++ b/sms-client/pom.xml @@ -0,0 +1,52 @@ + + 4.0.0 + org.onap.aaf.sms + sms-client + jar + 1.0.0-SNAPSHOT + sms-client + + + UTF-8 + 1.8 + 1.8 + + + + org.json + json + 20180130 + + + junit + junit + 4.12 + + + + + + org.apache.maven.plugins + maven-shade-plugin + 2.1 + + + package + + shade + + + + + org.onap.aaf.sms.ClientTestRunner + + + + + + + + + diff --git a/sms-client/src/java/example/SmsClientExample.java b/sms-client/src/java/example/SmsClientExample.java deleted file mode 100644 index dc0e776..0000000 --- a/sms-client/src/java/example/SmsClientExample.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2018 Intel Corporation, Inc - * - * 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. - */ - -import java.io.FileInputStream; -import java.lang.Boolean; -import java.lang.Integer; -import java.net.URL; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSessionContext; -import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManagerFactory; -import java.security.KeyStore; -import java.security.Provider; -import java.security.SecureRandom; -import java.security.Security; -import java.util.HashMap; -import java.util.Map; -import org.onap.aaf.sms.SmsClient; -import org.onap.aaf.sms.SmsResponse; - -public class SmsClientExample { - public static void main(String[] args) throws Exception { - // Set up the Sun PKCS 11 provider - Provider p = Security.getProvider("SunPKCS11-pkcs11Test"); - if (p==null) { - throw new RuntimeException("could not get security provider"); - } - - // Load the key store - char[] pin = "45789654".toCharArray(); - KeyStore keyStore = KeyStore.getInstance("PKCS11", p); - keyStore.load(null, pin); - - // Load the CA certificate - FileInputStream tst = new FileInputStream("/ca.jks"); - KeyStore trustStore = KeyStore.getInstance("JKS"); - trustStore.load(tst, pin); - - KeyManagerFactory keyManagerFactory = - KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); - //Add to keystore to key manager - keyManagerFactory.init(keyStore, pin); - - TrustManagerFactory trustManagerFactory = - TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - trustManagerFactory.init(trustStore); - - //Create the context - SSLContext context = SSLContext.getInstance("TLS"); - context.init(keyManagerFactory.getKeyManagers(), - trustManagerFactory.getTrustManagers(), new SecureRandom()); - //Create a socket factory - SSLSocketFactory ssf = context.getSocketFactory(); - SSLSessionContext sessCtx = context.getServerSessionContext(); - SmsClient sms = new SmsClient("onap.mydomain.com", 10443, ssf); - SmsResponse resp1 = sms.createDomain("onap.new.test.sms0"); - if ( resp1.getSuccess() ) { - System.out.println(resp1.getResponse()); - System.out.println(resp1.getResponseCode()); - } - Map m1 = new HashMap(); - m1.put("passwd", "gax6ChD0yft"); - SmsResponse resp2 = sms.storeSecret("onap.new.test.sms0", "testsec", m1); - if ( resp2.getSuccess() ) { - System.out.println(resp2.getResponse()); - System.out.println(resp2.getResponseCode()); - } - Map m2 = new HashMap(); - m2.put("username", "dbuser"); - m2.put("isadmin", new Boolean(true)); - m2.put("age", new Integer(40)); - m2.put("secretkey", "asjdhkuhioeukadfjsadnfkjhsdukfhaskdjhfasdf"); - m2.put("token", "2139084553458973452349230849234234908234342"); - SmsResponse resp3 = sms.storeSecret("onap.new.test.sms0","credentials", m2); - if ( resp3.getSuccess() ) { - System.out.println(resp3.getResponse()); - System.out.println(resp3.getResponseCode()); - } - SmsResponse resp4 = sms.getSecretNames("onap.new.test.sms0"); - if ( resp4.getSuccess() ) { - System.out.println(resp4.getResponse()); - System.out.println(resp4.getResponseCode()); - } - SmsResponse resp5= sms.getSecret("onap.new.test.sms0", "testsec"); - if ( resp5.getSuccess() ) { - System.out.println(resp5.getResponse()); - System.out.println(resp5.getResponseCode()); - } - SmsResponse resp6= sms.getSecret("onap.new.test.sms0", "credentials"); - if ( resp6.getSuccess() ) { - Boolean b = (Boolean)resp6.getResponse().get("isadmin"); - if ( b ) - System.out.println("Age=" + (Integer)resp6.getResponse().get("age")); - System.out.println(resp6.getResponse()); - System.out.println(resp6.getResponseCode()); - } - SmsResponse resp7=sms.deleteDomain("onap.new.test.sms0"); - if ( resp7.getSuccess() ) { - System.out.println(resp7.getResponse()); - System.out.println(resp7.getResponseCode()); - } - } -} diff --git a/sms-client/src/java/main/SmsClient.java b/sms-client/src/java/main/SmsClient.java deleted file mode 100644 index 17a9f16..0000000 --- a/sms-client/src/java/main/SmsClient.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright 2018 Intel Corporation, Inc - * - * 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. - */ - -package org.onap.aaf.sms; - -import javax.net.ssl.SSLSocketFactory; -import java.net.URL; -import javax.net.ssl.HttpsURLConnection; -import org.onap.aaf.sms.SmsResponse; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.InputStreamReader; -import java.io.BufferedReader; -import java.io.OutputStreamWriter; -import java.util.Map; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.ArrayList; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -public class SmsClient implements SmsInterface { - - private String baset; - private SSLSocketFactory ssf; - - public SmsClient(String host, int port, SSLSocketFactory s) { - baset = "https://"+ host + ":" + port + "/v1/sms"; - ssf = s; - } - public SmsClient(String host, int port, String version, SSLSocketFactory s) { - baset = "https://"+ host + ":" + port + "/" + version + "/sms"; - ssf = s; - } - - private Map getSubmap(Map raw, String k) { - Object v = raw.get(k); - if ( v != null ) { - Map r = (Map)v; - return(r); - } - else { - return(null); - } - } - - private List jsontolist(JSONArray a) throws JSONException { - List l = new ArrayList(); - for(int i=0;i jsontomap(JSONObject j) throws JSONException { - Map m = new HashMap(); - - Iterator ks = j.keys(); - while( ks.hasNext() ) { - String k = (String)ks.next(); - Object v = j.get(k); - - if ( v instanceof JSONArray ) { - v = jsontolist((JSONArray) v); - } else if ( v instanceof JSONObject ) { - v = jsontomap((JSONObject) v); - } - m.put(k, v); - } - return(m); - } - - protected Map strtomap(String r) throws JSONException { - JSONObject jobj = null; - - jobj = new JSONObject(r); - return(jsontomap(jobj)); - - } - protected SmsResponse execute(String reqtype, String t, String ins, boolean input, boolean output) { - - HttpsURLConnection conn; - int errorcode = -1; - SmsResponse resp = new SmsResponse(); - - try { - URL url = new URL(t); - conn = (HttpsURLConnection)url.openConnection(); - conn.setSSLSocketFactory(ssf); - conn.setRequestMethod(reqtype); - conn.setDoOutput(true); - conn.setDoInput(true); - conn.setRequestProperty("Content-Type", "application/json"); - conn.setRequestProperty("Accept", "application/json"); - - if ( input ) { - OutputStream out = conn.getOutputStream(); - OutputStreamWriter wr = new OutputStreamWriter(out); - wr.write(ins); - wr.flush(); - wr.close(); - } - errorcode = conn.getResponseCode(); - if ( output && errorcode > 0 ) { - InputStream inputstream = conn.getInputStream(); - InputStreamReader inputstreamreader = new InputStreamReader(inputstream); - BufferedReader bufferedreader = new BufferedReader(inputstreamreader); - - String response; - String save = ""; - while ((response = bufferedreader.readLine()) != null) { - save = save + response; - } - if ( !save.isEmpty() ) { - if ( errorcode/100 == 2 ) { - resp.setResponse(strtomap(save)); - } else { - resp.setErrorMessage(save); - } - } - } - } catch ( Exception e ) { - e.printStackTrace(); - resp.setResponseCode(errorcode); - return(resp); - } - resp.setResponseCode(errorcode); - return resp; - } - @Override - public SmsResponse createDomain(String dname) { - - String t = baset + "/domain"; - String input = "{\"name\":\"" + dname + "\"}"; - - SmsResponse resp = execute("POST", t, input, true, true); - int errcode = resp.getResponseCode(); - - if ( errcode > 0 && errcode/100 == 2 ) - resp.setSuccess(true); - else - resp.setSuccess(false); - - return(resp); - } - @Override - public SmsResponse deleteDomain(String dname) { - - String t = baset + "/domain/" + dname; - - SmsResponse resp = execute("DELETE", t, null, false, true); - int errcode = resp.getResponseCode(); - - if ( errcode > 0 && errcode/100 == 2 ) - resp.setSuccess(true); - else - resp.setSuccess(false); - - return(resp); - } - @Override - public SmsResponse storeSecret(String dname, String sname, Map values) { - - String t = baset + "/domain/" + dname + "/secret"; - Map cm = new HashMap(); - cm.put("name", sname); - cm.put("values", values); - JSONObject jobj = new JSONObject(cm); - - SmsResponse resp = execute("POST", t, jobj.toString(), true, false); - int errcode = resp.getResponseCode(); - - if ( errcode > 0 && errcode/100 == 2 ) - resp.setSuccess(true); - else - resp.setSuccess(false); - - return(resp); - } - @Override - public SmsResponse getSecretNames(String dname) { - - String t = baset + "/domain/" + dname + "/secret"; - - SmsResponse resp = execute("GET", t, null, false, true); - int errcode = resp.getResponseCode(); - - if ( errcode > 0 && errcode/100 == 2 ) - resp.setSuccess(true); - else - resp.setSuccess(false); - - return(resp); - } - @Override - public SmsResponse getSecret(String dname, String sname) { - - String t = baset + "/domain/" + dname + "/secret/" + sname; - - SmsResponse resp = execute("GET", t, null, false, true); - int errcode = resp.getResponseCode(); - - if ( errcode > 0 && errcode/100 == 2 ) { - Map m = getSubmap(resp.getResponse(), "values"); - if ( m != null ) { - resp.setSuccess(true); - resp.setResponse(m); - } - else { - resp.setSuccess(false); - } - } - else { - resp.setSuccess(false); - } - - return(resp); - - } - @Override - public SmsResponse deleteSecret(String dname, String sname) { - - String t = baset + "/domain/" + dname + "/secret/" + sname; - - SmsResponse resp = execute("DELETE", t, null, false, true); - int errcode = resp.getResponseCode(); - - if ( errcode > 0 && errcode/100 == 2 ) - resp.setSuccess(true); - else - resp.setSuccess(false); - - return(resp); - } -} diff --git a/sms-client/src/java/main/SmsInterface.java b/sms-client/src/java/main/SmsInterface.java deleted file mode 100644 index 31875d7..0000000 --- a/sms-client/src/java/main/SmsInterface.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2018 Intel Corporation, Inc - * - * 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. - */ - -package org.onap.aaf.sms; - -import org.onap.aaf.sms.SmsResponse; -import java.util.Map; - -public interface SmsInterface { - /* - Inputs dname - domain name - Output - name and uuid - Return SmsResponse object - success or failure - response code if connection succeeded, otherwise -1 - response string if expected. - */ - public SmsResponse createDomain(String dname); - - /* - Inputs dname - domain name - Output - none - Return SmsResponse object - success or failure - response code if connection succeeded, otherwise -1 - response string if expected. - - */ - public SmsResponse deleteDomain(String dname); - - /* - Inputs dname - domain name - Output - list of secret names - Return SmsResponse object - success or failure - response code if connection succeeded, otherwise -1 - response string if expected. - - */ - public SmsResponse getSecretNames(String dname); - - /* - Inputs dname - domain name - sname - secret name - values - list of key value pairs - Output - none - Return SmsResponse object - success or failure - response code if connection succeeded, otherwise -1 - response string if expected. - - */ - public SmsResponse storeSecret(String dname, String sname, Map values); - - /* - Inputs dname - domain name - sname - secret name - Output values - list of value pairs - Return SmsResponse object - success or failure - response code if connection succeeded, otherwise -1 - response string if expected. - - */ - public SmsResponse getSecret(String dname, String sname); - - /* - Inputs dname - domain name - sname - secret name - Output - none - Return SmsResponse object - success or failure - response code if connection succeeded, otherwise -1 - response string if expected. - */ - public SmsResponse deleteSecret(String dname, String sname); -} diff --git a/sms-client/src/java/main/SmsResponse.java b/sms-client/src/java/main/SmsResponse.java deleted file mode 100644 index b7a9980..0000000 --- a/sms-client/src/java/main/SmsResponse.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2018 Intel Corporation, Inc - * - * 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. - */ - -package org.onap.aaf.sms; - -import java.util.Map; - -public class SmsResponse { - private boolean success; - private int responseCode; - private String errorMessage; - private Map response; - - public SmsResponse() { - success = false; - responseCode = -1; - errorMessage = ""; - response = null; - } - public void setResponseCode(int code) { - responseCode = code; - } - public void setResponse(Map res) { - response = res; - } - public void setSuccess(boolean val) { - success = val; - } - public int getResponseCode() { - return responseCode; - } - public void setErrorMessage(String em) { - errorMessage = em; - } - public String getErrorMessage() { - return errorMessage; - } - public Map getResponse() { - return response; - } - public boolean getSuccess() { - return success; - } -} diff --git a/sms-client/src/java/test/ClientTestRunner.java b/sms-client/src/java/test/ClientTestRunner.java deleted file mode 100644 index dc5fbf9..0000000 --- a/sms-client/src/java/test/ClientTestRunner.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2018 Intel Corporation, Inc - * - * 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. - */ - -import org.junit.runner.JUnitCore; -import org.junit.runner.Result; -import org.junit.runner.notification.Failure; - -public class ClientTestRunner { - public static void main(String[] args) { - Result r = JUnitCore.runClasses( - SmsCreateDomainTest.class, - SmsDeleteDomainTest.class - ); - - for( Failure f : r.getFailures()) { - System.out.println(f.toString()); - } - System.out.println(r.wasSuccessful()); - } -} diff --git a/sms-client/src/java/test/SmsCreateDomainTest.java b/sms-client/src/java/test/SmsCreateDomainTest.java deleted file mode 100644 index 2bbe348..0000000 --- a/sms-client/src/java/test/SmsCreateDomainTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2018 Intel Corporation, Inc - * - * 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. - */ - -import junit.framework.*; -import org.onap.aaf.sms.SmsClient; -import org.onap.aaf.sms.SmsResponse; -import org.onap.aaf.sms.test.SmsSecureSocket; -import javax.net.ssl.SSLSocketFactory; -import java.util.HashMap; -import java.util.Map; - -public class SmsCreateDomainTest extends TestCase { - - public void testSmsCreateDomain() { - try { - SmsSecureSocket sss = new SmsSecureSocket(); - - SmsTest sms = new SmsTest("otconap4.sc.intel.com", 10443, sss.getSSF()); - SmsResponse resp = sms.createDomain("onap.new.test.sms0"); - assertTrue(resp.getSuccess()); - if ( resp.getSuccess() ) { - Map m = resp.getResponse(); - assertNotNull(m); - assertEquals(201, resp.getResponseCode()); - assertEquals("onap.new.test.sms0", m.get("name")); - } else { - fail("Unexpected response while creating domain"); - } - } catch ( Exception e ) { - fail("Exception while creating domain"); - } - } -} diff --git a/sms-client/src/java/test/SmsDeleteDomainTest.java b/sms-client/src/java/test/SmsDeleteDomainTest.java deleted file mode 100644 index aa047b2..0000000 --- a/sms-client/src/java/test/SmsDeleteDomainTest.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2018 Intel Corporation, Inc - * - * 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. - */ - -import junit.framework.*; -import org.onap.aaf.sms.SmsClient; -import org.onap.aaf.sms.SmsResponse; -import org.onap.aaf.sms.test.SmsSecureSocket; -import javax.net.ssl.SSLSocketFactory; -import java.util.HashMap; -import java.util.Map; - -public class SmsDeleteDomainTest extends TestCase { - - public void testSmsDeleteDomain() { - try { - SmsSecureSocket sss = new SmsSecureSocket(); - - SmsTest sms = new SmsTest("otconap4.sc.intel.com", 10443, sss.getSSF()); - SmsResponse resp = sms.deleteDomain("onap.new.test.sms0"); - assertTrue(resp.getSuccess()); - if ( resp.getSuccess() ) { - assertEquals(204, resp.getResponseCode()); - } else { - fail("Unexpected response while deleting domain"); - } - } catch ( Exception e ) { - fail("Exception while deleting domain"); - } - } -} diff --git a/sms-client/src/java/test/SmsSecureSocket.java b/sms-client/src/java/test/SmsSecureSocket.java deleted file mode 100644 index 34acb79..0000000 --- a/sms-client/src/java/test/SmsSecureSocket.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2018 Intel Corporation, Inc - * - * 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. - */ - -package org.onap.aaf.sms.test; - -import java.io.FileInputStream; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSessionContext; -import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManagerFactory; -import java.security.KeyStore; -import java.security.Provider; -import java.security.SecureRandom; -import java.security.Security; - -public class SmsSecureSocket { - private SSLSocketFactory ssf = null; - public SmsSecureSocket() throws Exception { - // Set up the Sun PKCS 11 provider - Provider p = Security.getProvider("SunPKCS11-pkcs11Test"); - if (p==null) { - throw new RuntimeException("could not get security provider"); - } - - // Load the key store - char[] pin = "123456789".toCharArray(); - KeyStore keyStore = KeyStore.getInstance("PKCS11", p); - keyStore.load(null, pin); - - // Load the CA certificate - FileInputStream tst = new FileInputStream("/ca.jks"); - KeyStore trustStore = KeyStore.getInstance("JKS"); - trustStore.load(tst, pin); - - KeyManagerFactory keyManagerFactory = - KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); - //Add to keystore to key manager - keyManagerFactory.init(keyStore, pin); - - TrustManagerFactory trustManagerFactory = - TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - trustManagerFactory.init(trustStore); - - //Create the context - SSLContext context = SSLContext.getInstance("TLS"); - context.init(keyManagerFactory.getKeyManagers(), - trustManagerFactory.getTrustManagers(), new SecureRandom()); - //Create a socket factory - SSLSocketFactory ssf = context.getSocketFactory(); - } - public SSLSocketFactory getSSF() { - return(ssf); - } -} diff --git a/sms-client/src/java/test/SmsTest.java b/sms-client/src/java/test/SmsTest.java deleted file mode 100644 index 79c1625..0000000 --- a/sms-client/src/java/test/SmsTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2018 Intel Corporation, Inc - * - * 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. - */ -//package org.onap.aaf.sms; - -import javax.net.ssl.SSLSocketFactory; -import java.net.URL; -import javax.net.ssl.HttpsURLConnection; -import org.onap.aaf.sms.SmsResponse; -import org.onap.aaf.sms.SmsClient; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.InputStreamReader; -import java.io.BufferedReader; -import java.io.OutputStreamWriter; -import java.util.Map; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.ArrayList; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -public class SmsTest extends SmsClient { - - public SmsTest(String host, int port, SSLSocketFactory s) { - super(host, port, s); - } - public SmsTest(String host, int port, String version, SSLSocketFactory s) { - super(host, port, version, s); - } - public SmsResponse execute(String reqtype, String t, String ins, boolean input, boolean output) { - Map m; - SmsResponse resp = new SmsResponse(); - System.out.println(t); - - switch ( reqtype ) { - case "POST": - if ( t.matches("(.*)/v1/sms/domain")) { - resp.setSuccess(true); - resp.setResponseCode(201); - try { - m = strtomap(ins); - } catch ( Exception e ) { - resp.setResponse(null); - return(resp); - } - resp.setResponse(m); - } - break; - case "DELETE": - if ( t.matches("(.*)/v1/sms/domain/(.*)") ) { - // for both delete domain & secret case - resp.setSuccess(true); - resp.setResponseCode(204); - resp.setResponse(null); - } - break; - - } - return resp; - } -} diff --git a/sms-client/src/main/example/SmsClientExample.java b/sms-client/src/main/example/SmsClientExample.java new file mode 100644 index 0000000..dc0e776 --- /dev/null +++ b/sms-client/src/main/example/SmsClientExample.java @@ -0,0 +1,118 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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. + */ + +import java.io.FileInputStream; +import java.lang.Boolean; +import java.lang.Integer; +import java.net.URL; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSessionContext; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManagerFactory; +import java.security.KeyStore; +import java.security.Provider; +import java.security.SecureRandom; +import java.security.Security; +import java.util.HashMap; +import java.util.Map; +import org.onap.aaf.sms.SmsClient; +import org.onap.aaf.sms.SmsResponse; + +public class SmsClientExample { + public static void main(String[] args) throws Exception { + // Set up the Sun PKCS 11 provider + Provider p = Security.getProvider("SunPKCS11-pkcs11Test"); + if (p==null) { + throw new RuntimeException("could not get security provider"); + } + + // Load the key store + char[] pin = "45789654".toCharArray(); + KeyStore keyStore = KeyStore.getInstance("PKCS11", p); + keyStore.load(null, pin); + + // Load the CA certificate + FileInputStream tst = new FileInputStream("/ca.jks"); + KeyStore trustStore = KeyStore.getInstance("JKS"); + trustStore.load(tst, pin); + + KeyManagerFactory keyManagerFactory = + KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + //Add to keystore to key manager + keyManagerFactory.init(keyStore, pin); + + TrustManagerFactory trustManagerFactory = + TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + trustManagerFactory.init(trustStore); + + //Create the context + SSLContext context = SSLContext.getInstance("TLS"); + context.init(keyManagerFactory.getKeyManagers(), + trustManagerFactory.getTrustManagers(), new SecureRandom()); + //Create a socket factory + SSLSocketFactory ssf = context.getSocketFactory(); + SSLSessionContext sessCtx = context.getServerSessionContext(); + SmsClient sms = new SmsClient("onap.mydomain.com", 10443, ssf); + SmsResponse resp1 = sms.createDomain("onap.new.test.sms0"); + if ( resp1.getSuccess() ) { + System.out.println(resp1.getResponse()); + System.out.println(resp1.getResponseCode()); + } + Map m1 = new HashMap(); + m1.put("passwd", "gax6ChD0yft"); + SmsResponse resp2 = sms.storeSecret("onap.new.test.sms0", "testsec", m1); + if ( resp2.getSuccess() ) { + System.out.println(resp2.getResponse()); + System.out.println(resp2.getResponseCode()); + } + Map m2 = new HashMap(); + m2.put("username", "dbuser"); + m2.put("isadmin", new Boolean(true)); + m2.put("age", new Integer(40)); + m2.put("secretkey", "asjdhkuhioeukadfjsadnfkjhsdukfhaskdjhfasdf"); + m2.put("token", "2139084553458973452349230849234234908234342"); + SmsResponse resp3 = sms.storeSecret("onap.new.test.sms0","credentials", m2); + if ( resp3.getSuccess() ) { + System.out.println(resp3.getResponse()); + System.out.println(resp3.getResponseCode()); + } + SmsResponse resp4 = sms.getSecretNames("onap.new.test.sms0"); + if ( resp4.getSuccess() ) { + System.out.println(resp4.getResponse()); + System.out.println(resp4.getResponseCode()); + } + SmsResponse resp5= sms.getSecret("onap.new.test.sms0", "testsec"); + if ( resp5.getSuccess() ) { + System.out.println(resp5.getResponse()); + System.out.println(resp5.getResponseCode()); + } + SmsResponse resp6= sms.getSecret("onap.new.test.sms0", "credentials"); + if ( resp6.getSuccess() ) { + Boolean b = (Boolean)resp6.getResponse().get("isadmin"); + if ( b ) + System.out.println("Age=" + (Integer)resp6.getResponse().get("age")); + System.out.println(resp6.getResponse()); + System.out.println(resp6.getResponseCode()); + } + SmsResponse resp7=sms.deleteDomain("onap.new.test.sms0"); + if ( resp7.getSuccess() ) { + System.out.println(resp7.getResponse()); + System.out.println(resp7.getResponseCode()); + } + } +} diff --git a/sms-client/src/main/java/org/onap/aaf/sms/SmsClient.java b/sms-client/src/main/java/org/onap/aaf/sms/SmsClient.java new file mode 100644 index 0000000..17a9f16 --- /dev/null +++ b/sms-client/src/main/java/org/onap/aaf/sms/SmsClient.java @@ -0,0 +1,256 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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. + */ + +package org.onap.aaf.sms; + +import javax.net.ssl.SSLSocketFactory; +import java.net.URL; +import javax.net.ssl.HttpsURLConnection; +import org.onap.aaf.sms.SmsResponse; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.InputStreamReader; +import java.io.BufferedReader; +import java.io.OutputStreamWriter; +import java.util.Map; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.ArrayList; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +public class SmsClient implements SmsInterface { + + private String baset; + private SSLSocketFactory ssf; + + public SmsClient(String host, int port, SSLSocketFactory s) { + baset = "https://"+ host + ":" + port + "/v1/sms"; + ssf = s; + } + public SmsClient(String host, int port, String version, SSLSocketFactory s) { + baset = "https://"+ host + ":" + port + "/" + version + "/sms"; + ssf = s; + } + + private Map getSubmap(Map raw, String k) { + Object v = raw.get(k); + if ( v != null ) { + Map r = (Map)v; + return(r); + } + else { + return(null); + } + } + + private List jsontolist(JSONArray a) throws JSONException { + List l = new ArrayList(); + for(int i=0;i jsontomap(JSONObject j) throws JSONException { + Map m = new HashMap(); + + Iterator ks = j.keys(); + while( ks.hasNext() ) { + String k = (String)ks.next(); + Object v = j.get(k); + + if ( v instanceof JSONArray ) { + v = jsontolist((JSONArray) v); + } else if ( v instanceof JSONObject ) { + v = jsontomap((JSONObject) v); + } + m.put(k, v); + } + return(m); + } + + protected Map strtomap(String r) throws JSONException { + JSONObject jobj = null; + + jobj = new JSONObject(r); + return(jsontomap(jobj)); + + } + protected SmsResponse execute(String reqtype, String t, String ins, boolean input, boolean output) { + + HttpsURLConnection conn; + int errorcode = -1; + SmsResponse resp = new SmsResponse(); + + try { + URL url = new URL(t); + conn = (HttpsURLConnection)url.openConnection(); + conn.setSSLSocketFactory(ssf); + conn.setRequestMethod(reqtype); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("Accept", "application/json"); + + if ( input ) { + OutputStream out = conn.getOutputStream(); + OutputStreamWriter wr = new OutputStreamWriter(out); + wr.write(ins); + wr.flush(); + wr.close(); + } + errorcode = conn.getResponseCode(); + if ( output && errorcode > 0 ) { + InputStream inputstream = conn.getInputStream(); + InputStreamReader inputstreamreader = new InputStreamReader(inputstream); + BufferedReader bufferedreader = new BufferedReader(inputstreamreader); + + String response; + String save = ""; + while ((response = bufferedreader.readLine()) != null) { + save = save + response; + } + if ( !save.isEmpty() ) { + if ( errorcode/100 == 2 ) { + resp.setResponse(strtomap(save)); + } else { + resp.setErrorMessage(save); + } + } + } + } catch ( Exception e ) { + e.printStackTrace(); + resp.setResponseCode(errorcode); + return(resp); + } + resp.setResponseCode(errorcode); + return resp; + } + @Override + public SmsResponse createDomain(String dname) { + + String t = baset + "/domain"; + String input = "{\"name\":\"" + dname + "\"}"; + + SmsResponse resp = execute("POST", t, input, true, true); + int errcode = resp.getResponseCode(); + + if ( errcode > 0 && errcode/100 == 2 ) + resp.setSuccess(true); + else + resp.setSuccess(false); + + return(resp); + } + @Override + public SmsResponse deleteDomain(String dname) { + + String t = baset + "/domain/" + dname; + + SmsResponse resp = execute("DELETE", t, null, false, true); + int errcode = resp.getResponseCode(); + + if ( errcode > 0 && errcode/100 == 2 ) + resp.setSuccess(true); + else + resp.setSuccess(false); + + return(resp); + } + @Override + public SmsResponse storeSecret(String dname, String sname, Map values) { + + String t = baset + "/domain/" + dname + "/secret"; + Map cm = new HashMap(); + cm.put("name", sname); + cm.put("values", values); + JSONObject jobj = new JSONObject(cm); + + SmsResponse resp = execute("POST", t, jobj.toString(), true, false); + int errcode = resp.getResponseCode(); + + if ( errcode > 0 && errcode/100 == 2 ) + resp.setSuccess(true); + else + resp.setSuccess(false); + + return(resp); + } + @Override + public SmsResponse getSecretNames(String dname) { + + String t = baset + "/domain/" + dname + "/secret"; + + SmsResponse resp = execute("GET", t, null, false, true); + int errcode = resp.getResponseCode(); + + if ( errcode > 0 && errcode/100 == 2 ) + resp.setSuccess(true); + else + resp.setSuccess(false); + + return(resp); + } + @Override + public SmsResponse getSecret(String dname, String sname) { + + String t = baset + "/domain/" + dname + "/secret/" + sname; + + SmsResponse resp = execute("GET", t, null, false, true); + int errcode = resp.getResponseCode(); + + if ( errcode > 0 && errcode/100 == 2 ) { + Map m = getSubmap(resp.getResponse(), "values"); + if ( m != null ) { + resp.setSuccess(true); + resp.setResponse(m); + } + else { + resp.setSuccess(false); + } + } + else { + resp.setSuccess(false); + } + + return(resp); + + } + @Override + public SmsResponse deleteSecret(String dname, String sname) { + + String t = baset + "/domain/" + dname + "/secret/" + sname; + + SmsResponse resp = execute("DELETE", t, null, false, true); + int errcode = resp.getResponseCode(); + + if ( errcode > 0 && errcode/100 == 2 ) + resp.setSuccess(true); + else + resp.setSuccess(false); + + return(resp); + } +} diff --git a/sms-client/src/main/java/org/onap/aaf/sms/SmsInterface.java b/sms-client/src/main/java/org/onap/aaf/sms/SmsInterface.java new file mode 100644 index 0000000..31875d7 --- /dev/null +++ b/sms-client/src/main/java/org/onap/aaf/sms/SmsInterface.java @@ -0,0 +1,90 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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. + */ + +package org.onap.aaf.sms; + +import org.onap.aaf.sms.SmsResponse; +import java.util.Map; + +public interface SmsInterface { + /* + Inputs dname - domain name + Output - name and uuid + Return SmsResponse object + success or failure + response code if connection succeeded, otherwise -1 + response string if expected. + */ + public SmsResponse createDomain(String dname); + + /* + Inputs dname - domain name + Output - none + Return SmsResponse object + success or failure + response code if connection succeeded, otherwise -1 + response string if expected. + + */ + public SmsResponse deleteDomain(String dname); + + /* + Inputs dname - domain name + Output - list of secret names + Return SmsResponse object + success or failure + response code if connection succeeded, otherwise -1 + response string if expected. + + */ + public SmsResponse getSecretNames(String dname); + + /* + Inputs dname - domain name + sname - secret name + values - list of key value pairs + Output - none + Return SmsResponse object + success or failure + response code if connection succeeded, otherwise -1 + response string if expected. + + */ + public SmsResponse storeSecret(String dname, String sname, Map values); + + /* + Inputs dname - domain name + sname - secret name + Output values - list of value pairs + Return SmsResponse object + success or failure + response code if connection succeeded, otherwise -1 + response string if expected. + + */ + public SmsResponse getSecret(String dname, String sname); + + /* + Inputs dname - domain name + sname - secret name + Output - none + Return SmsResponse object + success or failure + response code if connection succeeded, otherwise -1 + response string if expected. + */ + public SmsResponse deleteSecret(String dname, String sname); +} diff --git a/sms-client/src/main/java/org/onap/aaf/sms/SmsResponse.java b/sms-client/src/main/java/org/onap/aaf/sms/SmsResponse.java new file mode 100644 index 0000000..b7a9980 --- /dev/null +++ b/sms-client/src/main/java/org/onap/aaf/sms/SmsResponse.java @@ -0,0 +1,57 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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. + */ + +package org.onap.aaf.sms; + +import java.util.Map; + +public class SmsResponse { + private boolean success; + private int responseCode; + private String errorMessage; + private Map response; + + public SmsResponse() { + success = false; + responseCode = -1; + errorMessage = ""; + response = null; + } + public void setResponseCode(int code) { + responseCode = code; + } + public void setResponse(Map res) { + response = res; + } + public void setSuccess(boolean val) { + success = val; + } + public int getResponseCode() { + return responseCode; + } + public void setErrorMessage(String em) { + errorMessage = em; + } + public String getErrorMessage() { + return errorMessage; + } + public Map getResponse() { + return response; + } + public boolean getSuccess() { + return success; + } +} diff --git a/sms-client/src/test/java/org/onap/aaf/sms/ClientTestRunner.java b/sms-client/src/test/java/org/onap/aaf/sms/ClientTestRunner.java new file mode 100644 index 0000000..d209b2c --- /dev/null +++ b/sms-client/src/test/java/org/onap/aaf/sms/ClientTestRunner.java @@ -0,0 +1,35 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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. + */ + +package org.onap.aaf.sms; + +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +public class ClientTestRunner { + public static void main(String[] args) { + Result r = JUnitCore.runClasses( + SmsCreateDomainTest.class, + SmsDeleteDomainTest.class + ); + + for( Failure f : r.getFailures()) { + System.out.println(f.toString()); + } + System.out.println(r.wasSuccessful()); + } +} diff --git a/sms-client/src/test/java/org/onap/aaf/sms/SmsCreateDomainTest.java b/sms-client/src/test/java/org/onap/aaf/sms/SmsCreateDomainTest.java new file mode 100644 index 0000000..b1f5828 --- /dev/null +++ b/sms-client/src/test/java/org/onap/aaf/sms/SmsCreateDomainTest.java @@ -0,0 +1,46 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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. + */ + +package org.onap.aaf.sms; + +import junit.framework.*; +import org.onap.aaf.sms.SmsClient; +import org.onap.aaf.sms.SmsResponse; +import org.onap.aaf.sms.SmsSecureSocket; +import javax.net.ssl.SSLSocketFactory; +import java.util.HashMap; +import java.util.Map; + +public class SmsCreateDomainTest extends TestCase { + + public void testSmsCreateDomain() { + try { + SmsTest sms = new SmsTest("otconap4.sc.intel.com", 10443, null); + SmsResponse resp = sms.createDomain("onap.new.test.sms0"); + assertTrue(resp.getSuccess()); + if ( resp.getSuccess() ) { + Map m = resp.getResponse(); + assertNotNull(m); + assertEquals(201, resp.getResponseCode()); + assertEquals("onap.new.test.sms0", m.get("name")); + } else { + fail("Unexpected response while creating domain"); + } + } catch ( Exception e ) { + fail("Exception while creating domain"); + } + } +} diff --git a/sms-client/src/test/java/org/onap/aaf/sms/SmsDeleteDomainTest.java b/sms-client/src/test/java/org/onap/aaf/sms/SmsDeleteDomainTest.java new file mode 100644 index 0000000..712014e --- /dev/null +++ b/sms-client/src/test/java/org/onap/aaf/sms/SmsDeleteDomainTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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. + */ + +package org.onap.aaf.sms; + +import junit.framework.*; +import org.onap.aaf.sms.SmsClient; +import org.onap.aaf.sms.SmsResponse; +import org.onap.aaf.sms.SmsSecureSocket; +import javax.net.ssl.SSLSocketFactory; +import java.util.HashMap; +import java.util.Map; + +public class SmsDeleteDomainTest extends TestCase { + + public void testSmsDeleteDomain() { + try { + SmsTest sms = new SmsTest("otconap4.sc.intel.com", 10443, null); + SmsResponse resp = sms.deleteDomain("onap.new.test.sms0"); + assertTrue(resp.getSuccess()); + if ( resp.getSuccess() ) { + assertEquals(204, resp.getResponseCode()); + } else { + fail("Unexpected response while deleting domain"); + } + } catch ( Exception e ) { + fail("Exception while deleting domain"); + } + } +} diff --git a/sms-client/src/test/java/org/onap/aaf/sms/SmsSecureSocket.java b/sms-client/src/test/java/org/onap/aaf/sms/SmsSecureSocket.java new file mode 100644 index 0000000..3e28aa7 --- /dev/null +++ b/sms-client/src/test/java/org/onap/aaf/sms/SmsSecureSocket.java @@ -0,0 +1,68 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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. + */ + +package org.onap.aaf.sms; + +import java.io.FileInputStream; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSessionContext; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManagerFactory; +import java.security.KeyStore; +import java.security.Provider; +import java.security.SecureRandom; +import java.security.Security; + +public class SmsSecureSocket { + private SSLSocketFactory ssf = null; + public SmsSecureSocket() throws Exception { + // Set up the Sun PKCS 11 provider + Provider p = Security.getProvider("SunPKCS11-pkcs11Test"); + if (p==null) { + throw new RuntimeException("could not get security provider"); + } + + // Load the key store + char[] pin = "123456789".toCharArray(); + KeyStore keyStore = KeyStore.getInstance("PKCS11", p); + keyStore.load(null, pin); + + // Load the CA certificate + FileInputStream tst = new FileInputStream("/ca.jks"); + KeyStore trustStore = KeyStore.getInstance("JKS"); + trustStore.load(tst, pin); + + KeyManagerFactory keyManagerFactory = + KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + //Add to keystore to key manager + keyManagerFactory.init(keyStore, pin); + + TrustManagerFactory trustManagerFactory = + TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + trustManagerFactory.init(trustStore); + + //Create the context + SSLContext context = SSLContext.getInstance("TLS"); + context.init(keyManagerFactory.getKeyManagers(), + trustManagerFactory.getTrustManagers(), new SecureRandom()); + //Create a socket factory + SSLSocketFactory ssf = context.getSocketFactory(); + } + public SSLSocketFactory getSSF() { + return(ssf); + } +} diff --git a/sms-client/src/test/java/org/onap/aaf/sms/SmsTest.java b/sms-client/src/test/java/org/onap/aaf/sms/SmsTest.java new file mode 100644 index 0000000..4bdf54c --- /dev/null +++ b/sms-client/src/test/java/org/onap/aaf/sms/SmsTest.java @@ -0,0 +1,77 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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. + */ + +package org.onap.aaf.sms; + +import javax.net.ssl.SSLSocketFactory; +import java.net.URL; +import javax.net.ssl.HttpsURLConnection; +import org.onap.aaf.sms.SmsResponse; +import org.onap.aaf.sms.SmsClient; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.InputStreamReader; +import java.io.BufferedReader; +import java.io.OutputStreamWriter; +import java.util.Map; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.ArrayList; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +public class SmsTest extends SmsClient { + + public SmsTest(String host, int port, SSLSocketFactory s) { + super(host, port, s); + } + public SmsTest(String host, int port, String version, SSLSocketFactory s) { + super(host, port, version, s); + } + public SmsResponse execute(String reqtype, String t, String ins, boolean input, boolean output) { + Map m; + SmsResponse resp = new SmsResponse(); + System.out.println(t); + + switch ( reqtype ) { + case "POST": + if ( t.matches("(.*)/v1/sms/domain")) { + resp.setSuccess(true); + resp.setResponseCode(201); + try { + m = strtomap(ins); + } catch ( Exception e ) { + resp.setResponse(null); + return(resp); + } + resp.setResponse(m); + } + break; + case "DELETE": + if ( t.matches("(.*)/v1/sms/domain/(.*)") ) { + // for both delete domain & secret case + resp.setSuccess(true); + resp.setResponseCode(204); + resp.setResponse(null); + } + break; + + } + return resp; + } +} diff --git a/sms-service/src/Makefile b/sms-service/src/Makefile index 6569ec1..f085059 100644 --- a/sms-service/src/Makefile +++ b/sms-service/src/Makefile @@ -1,7 +1,11 @@ -build: +buildclient: + cd ../../sms-client && echo "Building JAVA client package" && \ + mvn package + +build: buildclient $(MAKE) -C sms build $(MAKE) -C quorumclient build deploy: $(MAKE) -C sms deploy - $(MAKE) -C quorumclient deploy \ No newline at end of file + $(MAKE) -C quorumclient deploy -- cgit 1.2.3-korg