public ReferenceBookBean(ReferenceBook book) { name = book.getName(); addressGroups = book.getAddressGroups().stream() .map(ag -> new AddressGroupBean(ag)) .collect(Collectors.toSet()); filterGroups = book.getFilterGroups().stream() .map(fg -> new FilterGroupBean(fg)) .collect(Collectors.toSet()); interfaceGroups = book.getInterfaceGroups().stream() .map(ig -> new InterfaceGroupBean(ig)) .collect(Collectors.toSet()); serviceEndpoints = book.getServiceEndpoints().stream() .map(se -> new ServiceEndpointBean(se)) .collect(Collectors.toSet()); serviceObjectGroups = book.getServiceObjectGroups().stream() .map(sog -> new ServiceObjectGroupBean(sog)) .collect(Collectors.toSet()); serviceObjects = book.getServiceObjects().stream() .map(so -> new ServiceObjectBean(so)) .collect(Collectors.toSet()); }
return ReferenceBook.builder(name) .setAddressGroups( firstNonNull(addressGroups, Collections.<AddressGroupBean>emptySet()).stream()
private static void beanBookMatch(ReferenceBookBean bean, ReferenceBook book) { assertThat(bean.name, equalTo(book.getName())); assertThat( bean.addressGroups, equalTo( book.getAddressGroups().stream() .map(ag -> new AddressGroupBean(ag)) .collect(Collectors.toSet()))); assertThat( bean.serviceEndpoints, equalTo( book.getServiceEndpoints().stream() .map(se -> new ServiceEndpointBean(se)) .collect(Collectors.toSet()))); assertThat( bean.serviceObjectGroups, equalTo( book.getServiceObjectGroups().stream() .map(sog -> new ServiceObjectGroupBean(sog)) .collect(Collectors.toSet()))); assertThat( bean.serviceObjects, equalTo( book.getServiceObjects().stream() .map(so -> new ServiceObjectBean(so)) .collect(Collectors.toSet()))); }
/** Returns the specified dimension in this ReferenceLibrary object */ public Optional<ReferenceBook> getReferenceBook(String bookName) { return _books.stream().filter(d -> d.getName().equals(bookName)).findFirst(); }
@VisibleForTesting public static Set<String> getAddressGroups(ReferenceLibrary referenceLibrary) { ImmutableSet.Builder<String> addressGroups = ImmutableSet.builder(); referenceLibrary .getReferenceBooks() .forEach( referenceBook -> referenceBook.getAddressGroups().stream() .map(AddressGroup::getName) .forEach(addressGroups::add)); return addressGroups.build(); }
/** * Adds the reference books in {@code newBooks} to the ReferenceLibrary at {@code path}. Books * with the same name are overwritten */ public static void mergeReferenceBooks( @Nonnull Path path, @Nonnull SortedSet<ReferenceBook> newBooks) throws IOException { ReferenceLibrary originalLibrary = read(path); List<ReferenceBook> booksToKeep = originalLibrary._books.stream() .filter( originalBook -> !newBooks.stream() .anyMatch(newBook -> newBook.getName().equals(originalBook.getName()))) .collect(Collectors.toList()); booksToKeep.addAll(newBooks); ReferenceLibrary newLibrary = new ReferenceLibrary(booksToKeep); write(newLibrary, path); }
/** check that we deserialize a basic object correctly */ @Test public void bookDeserializationBasic() throws IOException { ReferenceBook book = BatfishObjectMapper.mapper() .readValue( CommonUtil.readResource("org/batfish/referencelibrary/bookBasic.json"), ReferenceBook.class); assertThat(book.getAddressGroups(), hasSize(2)); assertThat(book.getFilterGroups(), hasSize(2)); assertThat(book.getInterfaceGroups(), hasSize(2)); assertThat(book.getServiceEndpoints(), hasSize(2)); assertThat(book.getServiceObjects(), hasSize(2)); assertThat(book.getServiceObjectGroups(), hasSize(2)); }
@Test public void testGetAddressBooks() { String book1 = "book1"; String book2 = "book2"; ReferenceBook refBook1 = ReferenceBook.builder(book1).build(); ReferenceBook refBook2 = ReferenceBook.builder(book2).build(); ReferenceLibrary referenceLibrary = new ReferenceLibrary(ImmutableList.of(refBook1, refBook2)); assertThat(getAddressBooks(referenceLibrary), equalTo(ImmutableSet.of(book1, book2))); }
@Override public Optional<ReferenceBook> getReferenceBook(String bookName) { return _referenceBooks.stream().filter(book -> book.getName().equals(bookName)).findAny(); } }
/** Test if a non-empty library is bean'd properly */ @Test public void constructorNonEmpty() throws IOException { ReferenceLibrary library = new ReferenceLibrary( ImmutableList.of( ReferenceBook.builder("book1").build(), ReferenceBook.builder("book2").build())); assertThat( new ReferenceLibraryBean(library).books, equalTo( ImmutableSet.of( new ReferenceBookBean(ReferenceBook.builder("book1").build()), new ReferenceBookBean(ReferenceBook.builder("book2").build())))); } }
@Test public void testGetAddressGroups() { String group1 = "group1"; String group2 = "group2"; AddressGroup addressGroup1 = new AddressGroup(null, group1); AddressGroup addressGroup2 = new AddressGroup(null, group2); ReferenceBook refBook1 = ReferenceBook.builder("book1") .setAddressGroups(ImmutableList.of(addressGroup1, addressGroup2)) .build(); ReferenceBook refBook2 = ReferenceBook.builder("book2").setAddressGroups(ImmutableList.of(addressGroup1)).build(); ReferenceBook refBook3 = ReferenceBook.builder("book3").build(); ReferenceLibrary referenceLibrary = new ReferenceLibrary(ImmutableList.of(refBook1, refBook2, refBook3)); assertThat(getAddressGroups(referenceLibrary), equalTo(ImmutableSet.of(group1, group2))); }
@Test public void addReferenceBook() throws IOException { String network = "someNetwork"; Main.getWorkMgr().initNetwork(network, null); // add book1 ReferenceBookBean book = new ReferenceBookBean(ReferenceBook.builder("book1").build()); Response response = getReferenceLibraryTarget(network).post(Entity.entity(book, MediaType.APPLICATION_JSON)); // test: book1 should have been added assertThat(response.getStatus(), equalTo(OK.getStatusCode())); ReferenceLibrary library = Main.getWorkMgr().getReferenceLibrary(network); assertThat(library.getReferenceBook("book1").isPresent(), equalTo(true)); // test: another addition of book1 should fail Response response2 = getReferenceLibraryTarget(network).post(Entity.entity(book, MediaType.APPLICATION_JSON)); assertThat(response2.getStatus(), equalTo(BAD_REQUEST.getStatusCode())); }
@Test public void getAddressBook() throws JsonProcessingException { String container = "someContainer"; Main.getWorkMgr().initNetwork(container, null); // write a library to the right place ReferenceLibrary.write( new ReferenceLibrary(ImmutableList.of(ReferenceBook.builder("book1").build())), Main.getWorkMgr().getReferenceLibraryPath(container)); // we only check that the right type of object is returned at the expected URL target // we rely on ReferenceBookBean to have created the object with the right content Response response = getAddressBookTarget(container, "book1").get(); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( response.readEntity(ReferenceBook.class), equalTo(ReferenceBook.builder("book1").build())); // should get 404 for non-existent dimension Response response2 = getAddressBookTarget(container, "book2").get(); assertThat(response2.getStatus(), equalTo(NOT_FOUND.getStatusCode())); } }
@Test public void constructorEmptyBook() { ReferenceBook book1 = ReferenceBook.builder("book1").build(); beanBookMatch(new ReferenceBookBean(book1), book1); }
new ReferenceLibrary( ImmutableList.of( ReferenceBook.builder("book1").build(), ReferenceBook.builder("book2").build())); ReferenceLibrary.write(library, tempPath); ReferenceBook.builder("book1") .setAddressGroups( ImmutableList.of(new AddressGroup(ImmutableSortedSet.of(), "add1"))) .build(), ReferenceBook.builder("book3").build()); equalTo( ImmutableSortedSet.of( ReferenceBook.builder("book1") .setAddressGroups( ImmutableList.of(new AddressGroup(ImmutableSortedSet.of(), "add1"))) .build(), ReferenceBook.builder("book2").build(), ReferenceBook.builder("book3").build())));
@Test public void delAddressBook() throws IOException { String container = "someContainer"; Main.getWorkMgr().initNetwork(container, null); // write a library to the right place ReferenceLibrary.write( new ReferenceLibrary(ImmutableList.of(ReferenceBook.builder("book1").build())), Main.getWorkMgr().getReferenceLibraryPath(container)); Response response = getAddressBookTarget(container, "book1").delete(); // response should be OK and book1 should have disappeared assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( Main.getWorkMgr().getReferenceLibrary(container).getReferenceBook("book1").isPresent(), equalTo(false)); // deleting again should fail Response response2 = getAddressBookTarget(container, "book1").delete(); assertThat(response2.getStatus(), equalTo(NOT_FOUND.getStatusCode())); }
@Test public void resolve() { ReferenceBook book = ReferenceBook.builder("book1") .setAddressGroups( ImmutableList.of( new AddressGroup( ImmutableSortedSet.of("1.1.1.1", "2.2.2.2:0.0.0.8"), "group1"))) .build(); MockSpecifierContext ctxt = MockSpecifierContext.builder().setReferenceBooks(ImmutableSortedSet.of(book)).build(); ReferenceAddressGroupIpSpaceSpecifier specifier = new ReferenceAddressGroupIpSpaceSpecifier("group1", "book1"); IpSpace resolvedSpace = AclIpSpace.union( specifier.resolve(ImmutableSet.of(), ctxt).getEntries().stream() .map(e -> e.getIpSpace()) .collect(Collectors.toSet())); assertThat( resolvedSpace, equalTo( AclIpSpace.union( new IpWildcard("1.1.1.1").toIpSpace(), new IpWildcard("2.2.2.2:0.0.0.8").toIpSpace()))); } }
@Test public void constructorNonEmptyBook() { ReferenceBook book2 = ReferenceBook.builder("book2") .setAddressGroups(ImmutableList.of(new AddressGroup(ImmutableSortedSet.of(), "ag1"))) .setFilterGroups(ImmutableList.of(new FilterGroup(ImmutableList.of(), "fg1"))) .setInterfaceGroups( ImmutableList.of(new InterfaceGroup(ImmutableSortedSet.of(), "ig1"))) .setServiceEndpoints(ImmutableList.of(new ServiceEndpoint("ag1", "se1", "so1"))) .setServiceObjectGroups( ImmutableList.of(new ServiceObjectGroup("sog1", ImmutableSortedSet.of()))) .setServiceObjects( ImmutableList.of(new ServiceObject(IpProtocol.TCP, "so1", new SubRange(2, 3)))) .build(); beanBookMatch(new ReferenceBookBean(book2), book2); }
@Test public void toAddressBook() { ReferenceBookBean bean = new ReferenceBookBean( ReferenceBook.builder("book2") .setAddressGroups( ImmutableList.of(new AddressGroup(ImmutableSortedSet.of(), "ag1"))) .setFilterGroups(ImmutableList.of(new FilterGroup(ImmutableList.of(), "fg1"))) .setInterfaceGroups( ImmutableList.of(new InterfaceGroup(ImmutableSortedSet.of(), "ig1"))) .setServiceEndpoints(ImmutableList.of(new ServiceEndpoint("ag1", "se1", "so1"))) .setServiceObjectGroups( ImmutableList.of(new ServiceObjectGroup("sog1", ImmutableSortedSet.of()))) .setServiceObjects( ImmutableList.of(new ServiceObject(IpProtocol.TCP, "so1", new SubRange(2, 3)))) .build()); beanBookMatch(bean, bean.toAddressBook()); } }
ReferenceBook.builder("refbook") .setInterfaceGroups( ImmutableList.of(