aboutsummaryrefslogtreecommitdiffstats
path: root/svc/svcbase/src
diff options
context:
space:
mode:
Diffstat (limited to 'svc/svcbase/src')
-rw-r--r--svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/client/EplClient.java149
-rw-r--r--svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/model/Epl.java104
-rw-r--r--svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.java21
-rw-r--r--svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.java91
-rw-r--r--svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.java150
-rw-r--r--svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.java126
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);
+ }
+}