public @Nonnull NodeRolesData toNodeRolesData() { return NodeRolesData.builder() .setDefaultDimension(defaultDimension) .setRoleDimensions( roleDimensions.stream() .map(NodeRoleDimensionBean::toNodeRoleDimension) .collect(ImmutableSortedSet.toImmutableSortedSet(Ordering.natural()))) .build(); }
@POST public Response addNodeRoleDimension(NodeRoleDimensionBean dimBean) throws IOException { checkClientArgument(dimBean.name != null, "Node role dimension must have a name"); NodeRolesData nodeRolesData = Main.getWorkMgr().getNetworkNodeRoles(_network); if (nodeRolesData == null) { return Response.status(Status.NOT_FOUND).build(); } Optional<NodeRoleDimension> dimension = nodeRolesData.getNodeRoleDimension(dimBean.name); checkClientArgument(!dimension.isPresent(), "Duplicate dimension specified: %s", dimBean.name); if (!Main.getWorkMgr() .putNetworkNodeRoles( NodeRolesData.builder() .setDefaultDimension(nodeRolesData.getDefaultDimension()) .setRoleDimensions( ImmutableSortedSet.<NodeRoleDimension>naturalOrder() .addAll(nodeRolesData.getNodeRoleDimensions()) .add(dimBean.toNodeRoleDimension()) .build()) .build(), _network)) { // if network was deleted while we were working return Response.status(Status.NOT_FOUND).build(); } return Response.ok().build(); }
@Test public void testPutNodeRolesMissingNetwork() { String network = "someContainer"; NodeRolesDataBean nodeRolesDataBean = new NodeRolesDataBean(NodeRolesData.builder().build(), null, ImmutableSet.of()); Response response = getNodeRolesTarget(network) .put(Entity.entity(nodeRolesDataBean, MediaType.APPLICATION_JSON)); assertThat(response.getStatus(), equalTo(NOT_FOUND.getStatusCode())); }
@Test public void testPutNodeRolesDuplicateDimensions() { String network = "someContainer"; Main.getWorkMgr().initNetwork(network, null); String name = "auto0"; NodeRolesDataBean nodeRolesDataBean = new NodeRolesDataBean( NodeRolesData.builder() .setRoleDimensions( ImmutableSortedSet.of( NodeRoleDimension.builder() .setName(name) .setRoles(ImmutableSortedSet.of(new NodeRole("foo", "bar"))) .build(), NodeRoleDimension.builder().setName(name).build())) .build(), null, ImmutableSet.of()); Response response = getNodeRolesTarget(network) .put(Entity.entity(nodeRolesDataBean, MediaType.APPLICATION_JSON)); assertThat(response.getStatus(), equalTo(BAD_REQUEST.getStatusCode())); }
@Test public void testProperties() throws IOException { String snapshot = "snapshot1"; String dimension = "someDimension"; String role = "someRole"; Set<String> nodes = ImmutableSet.of("a", "b"); NodeRole nodeRole = new NodeRole(role, "a.*"); NodeRoleDimension nodeRoleDimension = NodeRoleDimension.builder() .setName(dimension) .setRoles(ImmutableSortedSet.of(nodeRole)) .build(); NodeRolesData data = NodeRolesData.builder().setRoleDimensions(ImmutableSortedSet.of(nodeRoleDimension)).build(); NodeRolesDataBean bean = new NodeRolesDataBean(data, snapshot, nodes); assertThat( bean.roleDimensions, equalTo(ImmutableSet.of(new NodeRoleDimensionBean(nodeRoleDimension, snapshot, nodes)))); assertThat(bean.defaultDimension, nullValue()); } }
private void updateSnapshotNodeRoles() { // Compute new auto role data and updates existing auto data with it NetworkId networkId = _settings.getContainer(); SnapshotId snapshotId = _settings.getTestrig(); NodeRolesId snapshotNodeRolesId = _idResolver.getSnapshotNodeRolesId(networkId, snapshotId); Set<String> nodeNames = loadConfigurations().keySet(); Topology rawLayer3Topology = _topologyProvider.getRawLayer3Topology(getNetworkSnapshot()); SortedSet<NodeRoleDimension> autoRoles = new InferRoles(nodeNames, rawLayer3Topology).inferRoles(); NodeRolesData.Builder snapshotNodeRoles = NodeRolesData.builder(); try { if (!autoRoles.isEmpty()) { snapshotNodeRoles.setDefaultDimension(autoRoles.first().getName()); snapshotNodeRoles.setRoleDimensions(autoRoles); } _storage.storeNodeRoles(snapshotNodeRoles.build(), snapshotNodeRolesId); } catch (IOException e) { _logger.warnf("Could not update node roles: %s", e); } }
@Test public void testDelNodeRoleDimensionSuccess() throws IOException { String network = "network1"; String dimension = "dimension1"; Main.getWorkMgr().initNetwork(network, null); NodeRoleDimension nodeRoleDimension = NodeRoleDimension.builder().setName(dimension).build(); Main.getWorkMgr() .putNetworkNodeRoles( NodeRolesData.builder() .setRoleDimensions(ImmutableSortedSet.of(nodeRoleDimension)) .build(), network); Response response = getNodeRoleDimensionTarget(network, dimension).delete(); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( Main.getWorkMgr().getNetworkNodeRoles(network).getNodeRoleDimension(dimension).isPresent(), equalTo(false)); // deleting again should fail Response response2 = getNodeRoleDimensionTarget(network, dimension).delete(); assertThat(response2.getStatus(), equalTo(NOT_FOUND.getStatusCode())); }
@Test public void testPutNodeRolesSuccess() throws IOException { String network = "someContainer"; Main.getWorkMgr().initNetwork(network, null); NodeRolesData nodeRolesData = NodeRolesData.builder() .setDefaultDimension("a") .setRoleDimensions( ImmutableSortedSet.of(NodeRoleDimension.builder().setName("a").build())) .build(); NodeRolesDataBean nodeRolesDataBean = new NodeRolesDataBean(nodeRolesData, null, ImmutableSet.of()); Response response = getNodeRolesTarget(network) .put(Entity.entity(nodeRolesDataBean, MediaType.APPLICATION_JSON)); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat(Main.getWorkMgr().getNetworkNodeRoles(network), equalTo(nodeRolesData)); } }
@Test public void testGetNodeRoleDimensionSuccess() throws IOException { String network = "network1"; String dimension = "dimension1"; Main.getWorkMgr().initNetwork(network, null); NodeRoleDimension nodeRoleDimension = NodeRoleDimension.builder().setName(dimension).build(); Main.getWorkMgr() .putNetworkNodeRoles( NodeRolesData.builder() .setRoleDimensions(ImmutableSortedSet.of(nodeRoleDimension)) .build(), network); Response response = getNodeRoleDimensionTarget(network, dimension).get(); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( response.readEntity(NodeRoleDimensionBean.class).toNodeRoleDimension(), equalTo(nodeRoleDimension)); } }
@Test public void testNodeRoleDimensionAutocomplete() throws IOException { String network = "network"; NetworkId networkId = _idManager.generateNetworkId(); _idManager.assignNetwork(network, networkId); NodeRoleDimension suggested = NodeRoleDimension.builder().setName("someDimension").build(); NodeRoleDimension notSuggested = NodeRoleDimension.builder().setName("blah").build(); NodeRolesData nodeRolesData = NodeRolesData.builder() .setRoleDimensions(ImmutableSortedSet.of(suggested, notSuggested)) .build(); _manager.putNetworkNodeRoles(nodeRolesData, network); assertThat( _manager.autoComplete(network, "snapshot", Type.NODE_ROLE_DIMENSION, "dim", 5).stream() .map(AutocompleteSuggestion::getText) .collect(Collectors.toSet()), equalTo(ImmutableSet.of(suggested.getName()))); }
@Test public void testNoDuplicateDimensionsSameName() { String name = "auto0"; NodeRolesDataBean nodeRolesDataBean = new NodeRolesDataBean( NodeRolesData.builder() .setRoleDimensions( ImmutableSortedSet.of( NodeRoleDimension.builder() .setName(name) .setRoles(ImmutableSortedSet.of(new NodeRole("foo", "bar"))) .build(), NodeRoleDimension.builder().setName(name).build())) .build(), null, ImmutableSet.of()); assertThat(noDuplicateDimensions(nodeRolesDataBean), equalTo(false)); }
@Test public void testGetNodeRolesPresent() throws IOException { String network = "someContainer"; Main.getWorkMgr().initNetwork(network, null); NodeRolesData nodeRolesData = NodeRolesData.builder() .setDefaultDimension("a") .setRoleDimensions( ImmutableSortedSet.of(NodeRoleDimension.builder().setName("a").build())) .build(); Main.getWorkMgr().putNetworkNodeRoles(nodeRolesData, network); Response response = getNodeRolesTarget(network).get(); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( response.readEntity(NodeRolesDataBean.class).toNodeRolesData(), equalTo(nodeRolesData)); }
@Test public void testNoDuplicateDimensionsSameNameDifferentCase() { String name1 = "auto0"; String name2 = "AuTo0"; NodeRolesDataBean nodeRolesDataBean = new NodeRolesDataBean( NodeRolesData.builder() .setRoleDimensions( ImmutableSortedSet.of( NodeRoleDimension.builder().setName(name1).build(), NodeRoleDimension.builder().setName(name2).build())) .build(), null, ImmutableSet.of()); assertThat(noDuplicateDimensions(nodeRolesDataBean), equalTo(false)); }
@Test public void testInferredGetPresent() throws IOException { String network = "network1"; String snapshot = "snapshot1"; Main.getWorkMgr().initNetwork(network, null); Set<String> nodes = ImmutableSet.of(); WorkMgrTestUtils.initSnapshotWithTopology(network, snapshot, nodes); NodeRolesData nodeRolesData = NodeRolesData.builder().build(); WorkMgrTestUtils.setSnapshotNodeRoles(nodeRolesData, network, snapshot); Response response = getNodeRolesTarget(network, snapshot, true).get(); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( response.readEntity(NodeRolesDataBean.class), equalTo(new NodeRolesDataBean(nodeRolesData, snapshot, nodes))); }
@Test public void testNetworkGetPresent() throws IOException { String network = "network1"; String snapshot = "snapshot1"; Main.getWorkMgr().initNetwork(network, null); Set<String> nodes = ImmutableSet.of(); WorkMgrTestUtils.initSnapshotWithTopology(network, snapshot, nodes); NodeRolesData nodeRolesData = NodeRolesData.builder().build(); Response response = getNodeRolesTarget(network, snapshot, false).get(); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( response.readEntity(NodeRolesDataBean.class), equalTo(new NodeRolesDataBean(nodeRolesData, snapshot, nodes))); } }
@Test public void testNoDuplicateDimensionsValid() { String name1 = "auto0"; String name2 = "manual0"; NodeRolesDataBean nodeRolesDataBean = new NodeRolesDataBean( NodeRolesData.builder() .setRoleDimensions( ImmutableSortedSet.of( NodeRoleDimension.builder().setName(name1).build(), NodeRoleDimension.builder().setName(name2).build())) .build(), null, ImmutableSet.of()); assertThat(noDuplicateDimensions(nodeRolesDataBean), equalTo(true)); }
@Test public void testGetNodeRolesDefault() throws IOException { String network = "someContainer"; Main.getWorkMgr().initNetwork(network, null); NodeRolesData nodeRolesData = NodeRolesData.builder().build(); Response response = getNodeRolesTarget(network).get(); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( response.readEntity(NodeRolesDataBean.class).toNodeRolesData(), equalTo(nodeRolesData)); }
@Test public void testGetNetworkNodeRolesNoSnapshots() throws IOException { String network = "network1"; _manager.initNetwork(network, null); // should return empty node roles assertThat(_manager.getNetworkNodeRoles(network), equalTo(NodeRolesData.builder().build())); }
@Test public void testDelNodeRoleDimensionMissingDimension() throws IOException { String network = "network1"; String dimension = "dimension1"; Main.getWorkMgr().initNetwork(network, null); Main.getWorkMgr().putNetworkNodeRoles(NodeRolesData.builder().build(), network); Response response = getNodeRoleDimensionTarget(network, dimension).delete(); assertThat(response.getStatus(), equalTo(NOT_FOUND.getStatusCode())); }
@Test public void testGetNodeRoleDimensionMissingDimension() throws IOException { String network = "network1"; String dimension = "dimension1"; Main.getWorkMgr().initNetwork(network, null); Main.getWorkMgr().putNetworkNodeRoles(NodeRolesData.builder().build(), network); Response response = getNodeRoleDimensionTarget(network, dimension).get(); assertThat(response.getStatus(), equalTo(NOT_FOUND.getStatusCode())); }