diff options
Diffstat (limited to 'svc/svcbase/src')
6 files changed, 641 insertions, 0 deletions
diff --git a/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/client/EplClient.java b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/client/EplClient.java new file mode 100644 index 0000000..9bc7368 --- /dev/null +++ b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/client/EplClient.java @@ -0,0 +1,149 @@ +package com.cablelabs.vcpe.svc.svcbase.client; + +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.List; + +/** + * Created by steve on 6/8/15. + */ +public class EplClient { + + private Client client; // provided by Jersey + + public EplClient() { + client = ClientBuilder.newClient(); + } + + //-------------------------------------------------------- + public Epl create(Epl epl) + //-------------------------------------------------------- + { + WebTarget target =client.target("http://localhost:9090/svcmgr/webapi/svc/"); + Response response = target.path("epl") + .request(MediaType.APPLICATION_JSON) + .post(Entity.entity(epl, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response.readEntity(Epl.class); + } + + //-------------------------------------------------------- + public Epl update(Epl epl) + //-------------------------------------------------------- + { + WebTarget target =client.target("http://localhost:9090/svcmgr/webapi/svc/"); + Response response = target.path("epl/"+ epl.getId()) + .request(MediaType.APPLICATION_JSON) + .put(Entity.entity(epl, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response.readEntity(Epl.class); + } + + //-------------------------------------------------------- + public Epl get(String eplId) + //-------------------------------------------------------- + // get Epl of specified ID + + { + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc"); + + Response response = target.path("epl/"+eplId).request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(Epl.class); + } + + //-------------------------------------------------------- + public List<Epl> getAll() + //-------------------------------------------------------- + // get a list of all Epl instances + { + + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc/"); + + // Can I do this with a Response, so that I can check for errors + List<Epl> response = target.path("epl/list") + .request(MediaType.APPLICATION_JSON) + .get(new GenericType<List<Epl>>() { + }); + if (response == null) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException("there was an error on the server."); + } + return response; + } + + //-------------------------------------------------------- + public void delete(String eplId) + //-------------------------------------------------------- + // delete Epl of specified ID + { + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc/"); + Response response = target.path("epl/"+eplId).request(MediaType.APPLICATION_JSON).delete(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + } + + //-------------------------------------------------------- + public Epl testGet() + //-------------------------------------------------------- + // test marshaling of Epl class from server json + + { + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc/"); + + Response response = target.path("epl").request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(Epl.class); + } + + //-------------------------------------------------------- + public String ping() + //-------------------------------------------------------- + // test connectivity + { + + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc/"); + + Response response = target.path("epl").request(MediaType.TEXT_PLAIN).get(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + return response.readEntity(String.class); + } +} diff --git a/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/model/Epl.java b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/model/Epl.java new file mode 100644 index 0000000..254fb11 --- /dev/null +++ b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/model/Epl.java @@ -0,0 +1,104 @@ +package com.cablelabs.vcpe.svc.svcbase.model; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.evc.evcbase.model.Evc; +import com.cablelabs.vcpe.evc.evcbase.client.EvcClient; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * Created by steve on 5/24/15. + */ + +@XmlRootElement +public class Epl +{ + private String id; + private long numCustLocations; + private List<String> custAddressList = null; + private List<String> uniHostMacList = null; + private List<String> uniHostIpList = null; + private String cos; + private String evcId; + + // zero argument constructor required for JAX-RS + public Epl() { + id = "unset"; + this.numCustLocations = -1; + this.custAddressList = null; + this.uniHostMacList = null; + this.uniHostIpList = null; + this.cos = "unset"; + this.evcId = "unset"; + } + + public void setAllProps (String id, long numCustLocations, + List<String> custAddressList, + List<String> uniHostMacList, List<String> uniHostIpList, String cos, String evcId) { + this.id = id; + this.numCustLocations = numCustLocations; + this.custAddressList = custAddressList; + this.uniHostMacList = uniHostMacList; + this.uniHostIpList = uniHostIpList; + this.cos = cos; + this.evcId = evcId; + } + + public void dump() { dump(0); } + public void dump(int tab) { + + Dbg.p(tab, "id: " + this.id); + Dbg.p(tab, "numCustLocations: " + this.numCustLocations); + Dbg.p(tab, "Address List:"); + for (String addr : custAddressList) + Dbg.p(tab+1, addr); + Dbg.p(tab, "UNI Mac List:"); + for (String mac : uniHostMacList) + Dbg.p(tab+1, mac); + Dbg.p(tab, "UNI IP List:"); + for (String ip : uniHostIpList) + Dbg.p(tab+1, ip); + Dbg.p(tab, "cos: " + this.cos); + Dbg.p(tab, "Evc:" + this.evcId); +// if ( this.evcId != "unset") { // hacky +// EvcClient evcClient = new EvcClient(); +// Evc evc = evcClient.get(this.evcId); +// evc.dump(tab + 2); +// } + } + + public static void dumpList(List<Epl> eplList) { dumpList(0, eplList); } + public static void dumpList(int tab, List<Epl> eplList) { + int numSvc = 0; + Dbg.p("----- Epl List : [" + eplList.size() + "] elements"); + for (Epl curEpl : eplList) { + numSvc++; + Dbg.p(tab+1, "<Entry " + numSvc+">"); + curEpl.dump(tab+2); + } + } + + // Getters & Setters + public String getId() { return id; } + public void setId(String id) { this.id = id; } + + public long getNumCustLocations() { return numCustLocations; } + public void setNumCustLocations(long numCustLocations) { this.numCustLocations = numCustLocations; } + + public List<String> getCustAddressList() { return custAddressList; } + public void setCustAddressList(List<String> custAddressList) { this.custAddressList = custAddressList; } + + public List<String> getUniHostMacList() { return uniHostMacList; } + public void setUniHostMacList(List<String> uniHostMacList) { this.uniHostMacList = uniHostMacList; } + + + public List<String> getUniHostIpList() { return uniHostIpList; } + public void setUniHostIpList(List<String> uniHostIpList) { this.uniHostIpList = uniHostIpList; } + + public String getCos() { return cos; } + public void setCos(String cos) { this.cos = cos; } + + public String getEvcId() { return evcId; } + public void setEvcId(String evcId) { this.evcId = evcId; } +} diff --git a/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.java b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.java new file mode 100644 index 0000000..1142963 --- /dev/null +++ b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.java @@ -0,0 +1,21 @@ +package com.cablelabs.vcpe.svc.svcbase.repository; + +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import java.util.List; + +/** + * Created by steve on 5/25/15. + */ +public interface EplRespository +{ + // TODO add exceptions + + Epl add(Epl epl); // returns null if already exists, otherwise returns stored epl + Epl get(String svcId); // returns null if not found, otherwise stored svc + Epl update(Epl epl); // returns null if did not exit, otherwise epl as it was previous to update (put in any case) + Epl delete(String svcId); // returns null if not found, otherwise svc as it was previous to delete + int count(); // number of Epl stored in the repo + public void dump(int tab); // print out contents of the repo + List<Epl> getAll(); +} diff --git a/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.java b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.java new file mode 100644 index 0000000..af82c21 --- /dev/null +++ b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.java @@ -0,0 +1,91 @@ +package com.cablelabs.vcpe.svc.svcbase.repository; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by steve on 5/24/15. + */ + + +/* + Singleton that contains a hashmap which holds instances of Epl objects, indexed by CiS ID + */ + +public enum EplRespositoryInMem implements EplRespository { + INSTANCE; // Singleton + + private Map<String, Epl> svcDB = new ConcurrentHashMap<>(); + + @Override + //-------------------------------------------------------- + public Epl add(Epl epl) + //-------------------------------------------------------- + { + if ( this.get(epl.getId()) != null ) { + return null; + } + svcDB.put(epl.getId(), epl); + return epl; + } + + @Override + //-------------------------------------------------------- + public Epl get(String svcId) { + return svcDB.get(svcId); + } + //-------------------------------------------------------- + + @Override + //-------------------------------------------------------- + public Epl update(Epl epl) + //-------------------------------------------------------- + { + // put returns null if epl did not exist, other returns epl as it stood prior to put + return svcDB.put(epl.getId(), epl); + } + + @Override + //-------------------------------------------------------- + public Epl delete(String svcId) + //-------------------------------------------------------- + { + // remove returns null if svc did not exist, other returns svc as it stood prior to remove + return svcDB.remove(svcId); + } + + @Override + //-------------------------------------------------------- + public int count() { + return svcDB.size(); + } + //-------------------------------------------------------- + + @Override + //-------------------------------------------------------- + public List<Epl> getAll() + //-------------------------------------------------------- + { + List<Epl> eplList = new ArrayList<Epl>(svcDB.values()); + return eplList; + } + + @Override + //-------------------------------------------------------- + public void dump(int tab) + //-------------------------------------------------------- + { + Dbg.p(tab, "Epl Repo: " + svcDB.size() + " entrie(s)"); + int numSvc = 0; + for (Epl curEpl : svcDB.values()) { + numSvc++; + Dbg.p(tab+1, "<Entry " + numSvc+">"); + curEpl.dump(tab+2); + } + } +} diff --git a/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.java b/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.java new file mode 100644 index 0000000..f8950f9 --- /dev/null +++ b/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.java @@ -0,0 +1,150 @@ +package com.cablelabs.vcpe.svc.svcbase.client; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.cos.cosbase.client.CoSClient; +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import org.junit.Test; +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.List; + + +/** + * Created by steve on 6/8/15. + */ +public class EplClientTest { + + @Test + public void testAll() throws Exception { + + // First, create a couple of CoS's to reference + CoS gold = new CoS(); + CoS silver = new CoS(); + CoS bronze = new CoS(); + + gold.setAllProps("gold", 100, 0.99, 17.43, 2.43, 0.01); + silver.setAllProps("silver", 50, 0.95, 27.43, 2.43, 0.02); + bronze.setAllProps("bronze", 25, 0.90, 37.43, 2.43, 0.03); + + CoSClient coSClient = new CoSClient(); + + gold = coSClient.create(gold); + assertNotNull(gold); + silver = coSClient.create(silver); + assertNotNull(silver); + bronze = coSClient.create(bronze); + assertNotNull(bronze); + + List<String> locList1 = new ArrayList<String>(); + locList1.add("1 MEF Dr, Honolulu HI, USA"); + locList1.add("1 MEF Dr, Boston MA, MAS"); + List<String> uniList1 = new ArrayList<String>(); + uniList1.add("11:AA:00:00:00:00"); + uniList1.add("11:BB:00:00:00:00"); + List<String> ipList1 = new ArrayList<String>(); + ipList1.add("192.168.1.1"); + ipList1.add("192.168.1.2"); + + List<String> locList2 = new ArrayList<String>(); + locList2.add("22 MEF Dr, Honolulu HI, USA"); + locList2.add("22 MEF Dr, Boston MA, MAS"); + List<String> uniList2 = new ArrayList<String>(); + uniList2.add("22:AA:00:00:00:00"); + uniList2.add("22:BB:00:00:00:00"); + List<String> ipList2 = new ArrayList<String>(); + ipList2.add("192.168.2.1"); + ipList2.add("192.168.2.2"); + + List<String> locList3 = new ArrayList<String>(); + locList3.add("33 MEF Dr, Honolulu HI, USA"); + locList3.add("33 MEF Dr, Boston MA, MAS"); + List<String> uniList3 = new ArrayList<String>(); + uniList3.add("33:AA:00:00:00:00"); + uniList3.add("33:BB:00:00:00:00"); + List<String> ipList3 = new ArrayList<String>(); + ipList3.add("192.168.3.1"); + ipList3.add("192.168.3.2"); + + Epl epl_1 = new Epl(); + epl_1.setAllProps("epl-1", 2, locList1, uniList1, ipList1, gold.getId(), "unset"); + + EplClient eplClient = new EplClient(); + Dbg.p(epl_1.getId()+" being created via eplmgr"); + epl_1.dump(1); + + + // need to capture returned EPL in case it was modified by svc layer during creation + epl_1 = eplClient.create(epl_1); + assertNotNull(epl_1); + + Epl retrievedEpl = eplClient.get(epl_1.getId()); + assertNotNull(retrievedEpl); + Dbg.p("epl just retrieved from Epl Service"); + retrievedEpl.dump(1); + retrievedEpl = null; + + epl_1.setCos(bronze.getId()); + Dbg.p("EPL["+ epl_1.getId()+ "] : about to be updated"); + epl_1.dump(1); + assertNotNull(eplClient.update(epl_1)); + retrievedEpl = eplClient.get(epl_1.getId()); + assertNotNull(retrievedEpl); + Dbg.p("EPL["+ epl_1.getId()+ "] : retrieved after the update"); + retrievedEpl.dump(1); + + Epl epl_2 = new Epl(); + epl_2.setAllProps("epl-2", 2, locList2, uniList2, ipList2, silver.getId(), "unset"); + + Epl epl_3 = new Epl(); + epl_3.setAllProps("epl-3", 2, locList3, uniList3, ipList3, bronze.getId(), "unset"); + + // need to capture returned EPL in case it was modified by svc layer during creation + epl_2 = eplClient.create(epl_2); + assertNotNull(epl_2); + epl_3 = eplClient.create(epl_3); + assertNotNull(epl_3); + + List<Epl> eplList = eplClient.getAll(); + assertNotNull(eplList); + assertEquals(eplList.size(), 3); + + Epl.dumpList(eplList); + + eplClient.delete(epl_3.getId()); + eplList = eplClient.getAll(); + assertNotNull(eplList); + assertEquals(eplList.size(),2); + Epl.dumpList(eplList); + + eplClient.delete(epl_2.getId()); + eplList = eplClient.getAll(); + Epl.dumpList(eplList); + assertNotNull(eplList); + assertEquals(eplList.size(),1); + Epl.dumpList(eplList); + + eplClient.delete(epl_1.getId()); + eplList = eplClient.getAll(); + assertNotNull(eplList); + assertEquals(eplList.size(),0); + Epl.dumpList(eplList); + } + + @Test + public void testTestGet() throws Exception { + EplClient eplClient = new EplClient(); + Epl epl = eplClient.testGet(); + epl.dump();; + } + + @Test + public void testPing() throws Exception { + + EplClient eplClient = new EplClient(); + String resp = eplClient.ping(); + Dbg.p(resp); + } +} diff --git a/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.java b/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.java new file mode 100644 index 0000000..ff8c892 --- /dev/null +++ b/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.java @@ -0,0 +1,126 @@ +package com.cablelabs.vcpe.svc.svcbase.repository; + +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.*; + +/** + * Created by steve on 5/25/15. + */ +public class EplRepositoryTest +{ + + @Test + public void test() { + + // First, create a couple of CoS's to reference + CoS gold = new CoS(); + CoS silver = new CoS(); + CoS bronze = new CoS(); + + // id CIR/MBS avail delay jitter frameloss + gold.setAllProps("gold", 100, 0.99, 17.43, 2.43, 0.01); + silver.setAllProps("silver", 50, 0.95, 27.43, 2.43, 0.02); + bronze.setAllProps("bronze", 25, 0.90, 37.43, 2.43, 0.03); + + // lets add these to the + + List<String> locList1 = new ArrayList<String>(); + locList1.add("1111 MEF Dr, Honolulu HI, USA"); + locList1.add("2222 MEF Dr, Honolulu HI, USA"); + List<String> uniList1 = new ArrayList<String>(); + uniList1.add("11:11:11:11:11:11"); + uniList1.add("22:22:22:22:22:22"); + List<String> ipList1 = new ArrayList<String>(); + ipList1.add("192.168.1.1"); + ipList1.add("192.168.1.2"); + + + List<String> locList2 = new ArrayList<String>(); + locList2.add("1111 MEF Dr, Honolulu HI, USA"); + locList2.add("2222 MEF Dr, Boston MA, MAS"); + List<String> uniList2 = new ArrayList<String>(); + uniList2.add("11:11:11:11:11:11"); + uniList2.add("22:22:22:22:22:22"); + List<String> ipList2 = new ArrayList<String>(); + ipList2.add("192.168.2.1"); + ipList2.add("192.168.2.2"); + + List<String> locList3 = new ArrayList<String>(); + locList3.add("1111 MEF Dr, Honolulu HI, USA"); + locList3.add("2222 MEF Dr, Boston MA, MAS"); + locList3.add("3333 MEF Dr, Boulder CO, USA"); + List<String> uniList3 = new ArrayList<String>(); + uniList3.add("11:11:11:11:11:11"); + uniList3.add("22:22:22:22:22:22"); + List<String> ipList3 = new ArrayList<String>(); + ipList3.add("192.168.3.1"); + ipList3.add("192.168.3.2"); + + List<String> locList4 = new ArrayList<String>(); + locList4.add("1111 MEF Dr, Honolulu HI, USA"); + locList4.add("2222 MEF Dr, Boston MA, MAS"); + locList4.add("3333 MEF Dr, Boulder CO, USA"); + locList4.add("4444 MEF Dr, Los Angeles, CA, USA"); + List<String> uniList4 = new ArrayList<String>(); + uniList4.add("11:11:11:11:11:11"); + uniList4.add("22:22:22:22:22:22"); + uniList4.add("33:33:33:33:33:33"); + uniList4.add("44:44:44:44:44:44"); + List<String> ipList4 = new ArrayList<String>(); + ipList4.add("192.168.4.1"); + ipList4.add("192.168.4.2"); + + + + Epl epl_1 = new Epl(); + Epl epl_2 = new Epl(); + Epl epl_3 = new Epl(); + Epl epl_4 = new Epl(); + + epl_1.setAllProps("epl-1", 1, locList1, uniList1, ipList1, gold.getId(), "unset"); + epl_2.setAllProps("epl-2", 2, locList2, uniList2, ipList2, silver.getId(), "unset"); + epl_3.setAllProps("epl-3", 3, locList3, uniList3, ipList3, bronze.getId(), "unset"); + epl_4.setAllProps("epl-4", 4, locList4, uniList4, ipList4, gold.getId(), "unset"); + + EplRespository repo = EplRespositoryInMem.INSTANCE; + + assertNotNull(repo.add(epl_1)); + assertNotNull(repo.add(epl_2)); + assertNotNull(repo.add(epl_3)); + assertNull(repo.add(epl_3)); // duplicate + assertEquals(repo.count(), 3); + + assertNotNull(repo.get(epl_1.getId())); + assertNotNull(repo.get(epl_2.getId())); + assertNotNull(repo.get(epl_3.getId())); + + assertNotNull(repo.delete(epl_2.getId())); + assertNull(repo.delete(epl_2.getId())); + assertNull(repo.delete("not-in-repo")); + assertEquals(repo.count(), 2); + + assertEquals(repo.get(epl_1.getId()).getNumCustLocations(), 1); + assertNotEquals(repo.get(epl_3.getId()).getNumCustLocations(), 1); + + + assertNull(repo.update(epl_4)); // update non-existent cos + assertEquals(repo.count(), 3); + assertEquals(repo.get("epl-4").getCos(), gold.getId()); + + epl_4.setCos(silver.getId()); + assertNotNull(repo.update(epl_4)); // update existing svc, same object + assertEquals(repo.get(epl_4.getId()).getCos(), silver.getId()); + + Epl epl_4_2 = new Epl(); + epl_4_2.setAllProps("epl-4", 4, locList4, uniList4, ipList4, bronze.getId(), "unset"); + assertNotNull(repo.update(epl_4_2)); // update svc, new object + assertEquals(repo.get(epl_4_2.getId()).getNumCustLocations(), 4); + } +} |