ClusterComposition { public Set<BoltServerAddress> routers() { return new LinkedHashSet<>( routers ); } private  ClusterComposition( long expirationTimestamp );  ClusterComposition(
            long expirationTimestamp,
            Set<BoltServerAddress> readers,
            Set<BoltServerAddress> writers,
            Set<BoltServerAddress> routers ); boolean hasWriters(); boolean hasRoutersAndReaders(); Set<BoltServerAddress> readers(); Set<BoltServerAddress> writers(); Set<BoltServerAddress> routers(); long expirationTimestamp(); @Override boolean equals( Object o ); @Override int hashCode(); @Override String toString(); static ClusterComposition parse( Record record, long now );  }
@Test void routersWhenEmpty() { ClusterComposition composition = newComposition( 1, addresses( A, B ), addresses( C, D ), addresses() ); assertEquals( 0, composition.routers().size() ); }
@Test void routersWhenNonEmpty() { ClusterComposition composition = newComposition( 1, addresses( A, B ), addresses( C, D ), addresses( E, F ) ); assertEquals( addresses( E, F ), composition.routers() ); }