package org.yamcs.xtceproc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import org.junit.Test; import org.yamcs.YConfiguration; import org.yamcs.management.ManagementService; import org.yamcs.xtce.*; import org.yamcs.xtce.NameReference.Type; public class XtceDbFactoryTest { /* This test constructs the following tree: * a [p1] * - b1 [p1] * - b2 * - c1 [p1] * - b3 * */ @Test public void testNamespaces() throws Exception { YConfiguration.setup("refmdb"); ManagementService.setup(false); XtceDbFactory.reset(); XtceDb db = XtceDbFactory.getInstance("refmdb"); SequenceContainer pkt1 = db.getSequenceContainer("/REFMDB/SUBSYS1/PKT1"); assertNotNull(pkt1); // assertEquals(pkt1, db.getSequenceContainer("/REFMDB", "SUBSYS1/PKT1")); // Not supported yet assertEquals(pkt1, db.getSequenceContainer("/REFMDB/SUBSYS1", "PKT1")); Parameter p = db.getParameter("/REFMDB/SUBSYS1/IntegerPara1_1"); assertNotNull(p); assertEquals(p, db.getParameter("/REFMDB/SUBSYS1", "IntegerPara1_1")); SpaceSystem ss = db.getSpaceSystem("/REFMDB/SUBSYS1"); assertNotNull(ss); assertEquals(ss, db.getSpaceSystem("/REFMDB", "SUBSYS1")); NameDescription nd=XtceDbFactory.findReference(db.getRootSpaceSystem(), new NameReference("/REFMDB/SUBSYS1/IntegerPara1_1", Type.PARAMETER, null), ss); assertNotNull(nd); assertEquals("/REFMDB/SUBSYS1/IntegerPara1_1", nd.getQualifiedName()); nd=XtceDbFactory.findReference(db.getRootSpaceSystem(), new NameReference("../SUBSYS1/IntegerPara1_1", Type.PARAMETER, null), ss); assertNotNull(nd); assertEquals("/REFMDB/SUBSYS1/IntegerPara1_1", nd.getQualifiedName()); } @Test public void testResolveReference() { SpaceSystem root=new SpaceSystem(""); SpaceSystem a=new SpaceSystem("a"); root.addSpaceSystem(a); SpaceSystem a_b1=new SpaceSystem("b1"); a.addSpaceSystem(a_b1); SpaceSystem a_b2=new SpaceSystem("b2"); a.addSpaceSystem(a_b2); SpaceSystem a_b3=new SpaceSystem("b3"); a.addSpaceSystem(a_b3); SpaceSystem a_b2_c1=new SpaceSystem("c1"); a_b2.addSpaceSystem(a_b2_c1); Parameter a_p1=new Parameter("p1"); a_p1.addAlias("MDB:OPS Name", "a_p1"); a.addParameter(a_p1); Parameter a_b1_p1=new Parameter("p1"); a_b1_p1.addAlias("MDB:OPS Name", "a_b1_p1"); a_b1.addParameter(a_b1_p1); Parameter a_b2_c1_p1=new Parameter("p1"); a_b2_c1.addParameter(a_b2_c1_p1); NameDescription nd; nd=XtceDbFactory.findReference(root, new NameReference("/a/b2/c1/p1", Type.PARAMETER, null), a_b1); assertEquals(a_b2_c1_p1, nd); nd=XtceDbFactory.findReference(root, new NameReference("p1", Type.PARAMETER, null), a_b2_c1); assertEquals(nd, a_b2_c1_p1); nd=XtceDbFactory.findReference(root, new NameReference("p1", Type.PARAMETER, null), a_b2); assertEquals(a_p1, nd); nd=XtceDbFactory.findReference(root, new NameReference("p1", Type.PARAMETER, null), a_b1); assertEquals(a_b1_p1, nd); nd=XtceDbFactory.findReference(root, new NameReference("b2/c1/p1", Type.PARAMETER, null), a_b2_c1); assertEquals(a_b2_c1_p1, nd); nd=XtceDbFactory.findReference(root, new NameReference("b2/.//../b2/c1/p1", Type.PARAMETER, null), a_b2_c1); assertEquals(a_b2_c1_p1, nd); nd=XtceDbFactory.findReference(root, new NameReference("../p1", Type.PARAMETER, null), a_b2_c1); assertNull(nd); nd=XtceDbFactory.findReference(root, new NameReference("../../p1", Type.PARAMETER, null), a_b2_c1); assertEquals(a_p1, nd); nd=XtceDbFactory.findReference(root, new NameReference("../../p1", Type.PARAMETER, null), a_b3); assertNull(nd); nd=XtceDbFactory.findReference(root, new NameReference("./p1", Type.PARAMETER, null), a_b2_c1); assertEquals(nd, a_b2_c1_p1); nd=XtceDbFactory.findReference(root, new NameReference("./p1", Type.PARAMETER, null), a_b2); assertNull(nd); nd=XtceDbFactory.findReference(root, new NameReference("/a/b2/c1/.//p1", Type.PARAMETER, null), a_b2); assertEquals(a_b2_c1_p1, nd); nd=XtceDbFactory.findReference(root, new NameReference("/a/..", Type.PARAMETER, null), a_b2); assertNull(nd); nd=XtceDbFactory.findReference(root, new NameReference("p2", Type.PARAMETER, null), a_b2); assertNull(nd); } @Test public void testInstantiation() throws Exception { YConfiguration.setup("XtceDbFactoryTest"); XtceDbFactory.reset(); XtceDb db1 = XtceDbFactory.getInstance("refmdb-a"); XtceDb db2 = XtceDbFactory.getInstance("refmdb-a"); assertSame(db1, db2); db1 = XtceDbFactory.getInstance("refmdb-a"); db2 = XtceDbFactory.getInstance("refmdb-b"); assertNotSame("Even if it's the same DB, require different instantiations per instance", db1, db2); } }