@Test
	public void testGetRangeValues() {
		try (Transaction tx = b.startTransaction()) {
			root = manager.createRootObject(ctx.getSchema(new SchemaName("Session"))).getChild();
			targetContainer = manager.createObject(KeyPath.parse("Targets"));
			root.setAttribute(Lifespan.ALL, "Targets", targetContainer);

			TraceObjectValue rangeVal =
				root.setValue(Lifespan.nowOn(0), "a", b.range(0x1000, 0x1fff));

			assertTrue(root.getValues(Lifespan.at(0)).contains(rangeVal));
			assertFalse(targetContainer.getValues(Lifespan.ALL).contains(rangeVal));
			assertEquals(rangeVal, root.getValue(0, "a"));
			assertNull(root.getValue(0, "b"));

			assertEquals(Set.of(rangeVal),
				root.getSuccessors(Lifespan.ALL, PathFilter.parse("a"))
						.map(p -> p.getLastEntry())
						.collect(Collectors.toSet()));
			assertEquals(Set.of(),
				root.getSuccessors(Lifespan.toNow(-1), PathFilter.parse("a"))
						.map(p -> p.getLastEntry())
						.collect(Collectors.toSet()));
			assertEquals(Set.of(),
				root.getSuccessors(Lifespan.ALL, PathFilter.parse("b"))
						.map(p -> p.getLastEntry())
						.collect(Collectors.toSet()));
			assertEquals(Set.of(),
				targetContainer.getSuccessors(Lifespan.ALL, PathFilter.parse("a"))
						.map(p -> p.getLastEntry())
						.collect(Collectors.toSet()));

			assertEquals(Set.of(rangeVal),
				Set.copyOf(manager.getValuesIntersecting(Lifespan.ALL, b.range(0, -1))));
			assertEquals(Set.of(rangeVal),
				Set.copyOf(manager.getValuesIntersecting(Lifespan.ALL, b.range(0, -1), "a")));
			assertEquals(Set.of(),
				Set.copyOf(manager.getValuesIntersecting(Lifespan.toNow(-1), b.range(0, -1))));
			assertEquals(Set.of(),
				Set.copyOf(manager.getValuesIntersecting(Lifespan.ALL, b.range(0, 0xfff))));
			assertEquals(Set.of(),
				Set.copyOf(manager.getValuesIntersecting(Lifespan.ALL, b.range(0, -1), "b")));
		}
	}
Fails because you cannot create a second root object.
Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/target/DBTraceObjectManagerTest.java