package tests; import static org.junit.Assert.*; import org.junit.Test; import models.*; import models.algebra.Variable; import models.dataConstraintModel.*; import models.dataFlowModel.*; public class DataFlowModelTest { @Test public void test() { // Construct a data-flow architecture model. DataTransferModel model = new DataTransferModel(); ResourcePath customers = new ResourcePath("customers"); // "customers" ResourcePath customer = new ResourcePath(customers, new Variable("uid")); // "customers.{uid}" ResourcePath customer_off = new ResourcePath(customer, "off"); // "customers.{uid}.off" ResourcePath customer_add = new ResourcePath(customer, "add"); // "customers.{uid}.add" ResourcePath companies = new ResourcePath("companies"); // "companies" ResourcePath company = new ResourcePath(companies, new Variable("cid")); // "companies.{cid}" ResourcePath company_add = new ResourcePath(company, "add"); // "companies.{cid}.add" model.addResourcePath(customer_off); model.addResourcePath(customer_add); model.addResourcePath(company_add); // === cio_setCustomerOff(uid) === // // out customers.{uid}.off(c, set(x)) == x // DataTransferChannel cio_setCustomerOff = new DataTransferChannel("CIO_SetCustomerOff", new Variable("uid")); // set customer's office (an input channel) ChannelMember customer_off_1 = new ChannelMember(customer_off); cio_setCustomerOff.addChannelMemberAsOutput(customer_off_1); assertEquals(customer_off.getPathParams().get(0), cio_setCustomerOff.getSelectors().iterator().next().getExpression()); // === cio_setCompanyAdd(cid) === // // out companies.{cid}.add(a, set(y)) == y // DataTransferChannel cio_setCompanyAdd = new DataTransferChannel("CIO_SetCompanyAdd", new Variable("cid")); // set companie's address (an input channel) ChannelMember company_add_1 = new ChannelMember(company_add); cio_setCompanyAdd.addChannelMemberAsOutput(company_add_1); assertEquals(company_add.getPathParams().get(0), cio_setCompanyAdd.getSelectors().iterator().next().getExpression()); // === c === // // in customers.{uid}.off( c, update(cid, a2)) == cid // in companies.{cid}.add( a, update(cid, a2)) == a2 // out customers.{uid}.add(b, update(cid, a2)) == a2 // DataTransferChannel c = new DataTransferChannel("c", new Variable("uid")); // update customer's address ChannelMember customer_off_2 = new ChannelMember(customer_off); ChannelMember company_add_2 = new ChannelMember(company_add); ChannelMember customer_add_2 = new ChannelMember(customer_add); c.addChannelMemberAsInput(customer_off_2); c.addChannelMemberAsInput(company_add_2); c.addChannelMemberAsOutput(customer_add_2); assertEquals(customer_off.getPathParams().get(0), c.getSelectors().iterator().next().getExpression()); assertEquals(customer_add.getPathParams().get(0), c.getSelectors().iterator().next().getExpression()); assertEquals(company_add.getPathParams().get(0), new Variable("cid")); // Construct a data-flow architecture model. model.addIOChannel(cio_setCustomerOff); model.addIOChannel(cio_setCompanyAdd); model.addChannel(c); // Check the model. assertEquals(3, model.getResourcePaths().size()); assertEquals(7, model.getResourceHierarchies().size()); assertEquals(2, model.getIOChannels().size()); assertEquals(1, model.getChannels().size()); // Extract the resource dependency graph. DataFlowGraph resourceDependencyGraph = model.getDataFlowGraph(); // Check the graph. assertEquals(7, resourceDependencyGraph.getResourceNodes().size()); assertEquals(3, resourceDependencyGraph.getChannelNodes().size()); assertEquals(5, resourceDependencyGraph.getEdges().size()); for (Edge e: resourceDependencyGraph.getEdges()) { System.out.println(e.getSource() + "-(" + e + ")->" + e.getDestination()); } } }