Пример #1
0
  // @Test
  public void testSubnetCascadingDelete() {
    // Create a subnet with several configuration pieces: option 3,
    // option 121, and a host assignment. Then delete it.
    ClientResponse response;

    DtoDhcpSubnet subnet = new DtoDhcpSubnet();
    subnet.setSubnetPrefix("172.31.0.0");
    subnet.setSubnetLength(24);
    subnet.setServerAddr("172.31.0.118");
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet);
    assertEquals(201, response.getStatus());
    subnet =
        resource()
            .uri(response.getLocation())
            .accept(APPLICATION_DHCP_SUBNET_JSON)
            .get(DtoDhcpSubnet.class);

    DtoDhcpHost host1 = new DtoDhcpHost();
    host1.setMacAddr("02:33:44:55:00:00");
    host1.setIpAddr("172.31.0.11");
    host1.setName("saturn");
    response =
        resource()
            .uri(subnet.getHosts())
            .type(APPLICATION_DHCP_HOST_JSON)
            .post(ClientResponse.class, host1);
    assertEquals(201, response.getStatus());

    // List the subnets
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .accept(APPLICATION_DHCP_SUBNET_COLLECTION_JSON)
            .get(ClientResponse.class);
    assertEquals(200, response.getStatus());
    DtoDhcpSubnet[] subnets = response.getEntity(DtoDhcpSubnet[].class);
    assertThat("We expect 1 listed subnets.", subnets, arrayWithSize(1));
    assertThat(
        "We expect the listed subnets to match the one we created.",
        subnets,
        arrayContainingInAnyOrder(subnet));

    // Now delete the subnet.
    response = resource().uri(subnet.getUri()).delete(ClientResponse.class);
    assertEquals(204, response.getStatus());
    // Show that the list of DHCP subnet configurations is empty.
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .accept(APPLICATION_DHCP_SUBNET_COLLECTION_JSON)
            .get(ClientResponse.class);
    assertEquals(200, response.getStatus());
    subnets = response.getEntity(DtoDhcpSubnet[].class);
    assertThat("We expect 0 listed subnets.", subnets, arrayWithSize(0));
  }
Пример #2
0
  @Before
  public void before() {
    ClientResponse response;

    DtoApplication app = resource().path("").accept(APPLICATION_JSON_V5).get(DtoApplication.class);

    bridge = new DtoBridge();
    bridge.setName("br1234");
    bridge.setTenantId("DhcpTenant");
    response =
        resource()
            .uri(app.getBridges())
            .type(APPLICATION_BRIDGE_JSON)
            .post(ClientResponse.class, bridge);
    assertEquals("The bridge was created.", 201, response.getStatus());
    bridge =
        resource().uri(response.getLocation()).accept(APPLICATION_BRIDGE_JSON).get(DtoBridge.class);
  }
Пример #3
0
    @Before
    public void setUp()
        throws StateAccessException, InterruptedException, KeeperException, SerializationException {

      WebResource resource = resource();
      dtoResource = new DtoWebResource(resource);

      DtoHost host1 = new DtoHost();
      host1.setName("host1");

      DtoBridge bridge1 = new DtoBridge();
      bridge1.setName("bridge1-name");
      bridge1.setTenantId("tenant1-id");

      DtoRouter router1 = new DtoRouter();
      router1.setName("router1-name");
      router1.setTenantId("tenant1-id");

      DtoBridgePort bridgePort1 = new DtoBridgePort();
      DtoBridgePort bridgePort2 = new DtoBridgePort();

      DtoTunnelZone tunnelZone1 = new DtoTunnelZone();
      tunnelZone1.setName("tz1-name");

      topology =
          new Topology.Builder(dtoResource)
              .create("router1", router1)
              .create("bridge1", bridge1)
              .create("bridge1", "bridgePort1", bridgePort1)
              .create("bridge1", "bridgePort2", bridgePort2)
              .build();

      hostTopology =
          new HostTopology.Builder(dtoResource)
              .create(host1Id, host1)
              .create("tz1", tunnelZone1)
              .build();

      URI baseUri = resource().getURI();
      api = new MidonetApi(baseUri.toString());
      api.enableLogging();
    }
Пример #4
0
  private void createActualTenants(int count) {
    Topology.Builder builder = new Topology.Builder(dtoResource);

    for (int i = 0; i < count; i++) {
      String tenantId = Integer.toString(i);
      if (isCompatApiEnabled()) {
        // In the new storage stack we don't store tenants in MidoNet
        // and instead fetch them directly from the AuthService, so
        // let's add them there.
        AuthService as = _injector.getInstance(AuthService.class);
        ((MockAuthService) as).addTenant(tenantId, tenantId);
      } else {
        // TODO: remove when old stack is removed
        DtoBridge bridge = new DtoBridge();
        bridge.setName(tenantId);
        bridge.setTenantId(tenantId);
        builder.create(tenantId, bridge);
      }
    }

    topology = builder.build();
  }
Пример #5
0
  // @Test
  public void testGatewaySetting() throws Exception {
    ClientResponse response;

    DtoDhcpSubnet subnet1 = new DtoDhcpSubnet();
    subnet1.setSubnetPrefix("172.31.0.0");
    subnet1.setSubnetLength(24);
    subnet1.setDefaultGateway("172.31.0.1");
    subnet1.setServerAddr("172.31.0.118");
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet1);

    assertEquals(201, response.getStatus());

    DtoDhcpSubnet[] subnets =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_COLLECTION_JSON)
            .get(DtoDhcpSubnet[].class);
    Assert.assertNotNull(subnets);
  }
Пример #6
0
  // @Test
  public void testBadRequests() {
    // Test some bad network lengths
    DtoDhcpSubnet subnet1 = new DtoDhcpSubnet();
    subnet1.setSubnetPrefix("172.31.0.0");
    subnet1.setSubnetLength(-3);
    subnet1.setDefaultGateway("172.31.0.1");
    subnet1.setServerAddr("172.31.0.118");
    ClientResponse response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet1);
    assertEquals(400, response.getStatus());
    subnet1.setSubnetLength(33);
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet1);
    assertEquals(400, response.getStatus());

    // Test some bad network addresses
    subnet1.setSubnetLength(24);
    subnet1.setSubnetPrefix("10.0.0");
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet1);
    assertEquals(400, response.getStatus());
    subnet1.setSubnetPrefix("321.4.5.6");
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet1);
    assertEquals(400, response.getStatus());

    // Test some bad default gateways.
    subnet1.setSubnetPrefix("172.31.0.0");
    subnet1.setDefaultGateway("nonsense");
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet1);
    assertEquals(400, response.getStatus());
    subnet1.setDefaultGateway("1.2.3.4.5");
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet1);
    assertEquals(400, response.getStatus());
  }
Пример #7
0
  @Test
  public void testEnabled() {
    ClientResponse response;

    // Create an enabled subnet
    DtoDhcpSubnet subnet1 = new DtoDhcpSubnet();
    subnet1.setSubnetPrefix("10.0.0.0");
    subnet1.setSubnetLength(24);
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON_V2)
            .post(ClientResponse.class, subnet1);
    assertEquals(201, response.getStatus());

    // Test GET
    subnet1 =
        resource()
            .uri(response.getLocation())
            .accept(APPLICATION_DHCP_SUBNET_JSON_V2)
            .get(DtoDhcpSubnet.class);
    assertEquals(true, subnet1.isEnabled());

    // Disable a subnet via update
    subnet1.setEnabled(false);
    response =
        resource()
            .uri(subnet1.getUri())
            .type(APPLICATION_DHCP_SUBNET_JSON_V2)
            .put(ClientResponse.class, subnet1);
    assertEquals(204, response.getStatus());

    subnet1 =
        resource()
            .uri(subnet1.getUri())
            .accept(APPLICATION_DHCP_SUBNET_JSON_V2)
            .get(DtoDhcpSubnet.class);
    assertEquals(false, subnet1.isEnabled());
  }
Пример #8
0
  @Test
  public void testHosts() {
    // In this test remember that there will be multiple host definitions.
    // The system enforces that there is only one host def per mac address.
    ClientResponse response;

    DtoDhcpSubnet subnet = new DtoDhcpSubnet();
    subnet.setSubnetPrefix("172.31.0.0");
    subnet.setSubnetLength(24);
    subnet.setServerAddr("172.31.0.118");
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet);
    assertEquals(201, response.getStatus());
    subnet =
        resource()
            .uri(response.getLocation())
            .accept(APPLICATION_DHCP_SUBNET_JSON)
            .get(DtoDhcpSubnet.class);

    DtoDhcpHost host1 = new DtoDhcpHost();
    List<DtoExtraDhcpOpt> opts = new ArrayList<>();
    opts.add(new DtoExtraDhcpOpt("name1", "val1"));
    opts.add(new DtoExtraDhcpOpt("name2", "val2"));
    opts.add(new DtoExtraDhcpOpt("name3", "val3"));
    host1.setMacAddr("02:33:44:55:00:00");
    host1.setIpAddr("172.31.0.11");
    host1.setName("saturn");
    host1.setExtraDhcpOpts(opts);
    response =
        resource()
            .uri(subnet.getHosts())
            .type(APPLICATION_DHCP_HOST_JSON_V2)
            .post(ClientResponse.class, host1);
    assertEquals(201, response.getStatus());
    host1 =
        resource()
            .uri(response.getLocation())
            .accept(APPLICATION_DHCP_HOST_JSON_V2)
            .get(DtoDhcpHost.class);
    assertEquals("02:33:44:55:00:00", host1.getMacAddr());
    assertEquals("172.31.0.11", host1.getIpAddr());
    assertEquals("saturn", host1.getName());
    assertEquals(opts, host1.getExtraDhcpOpts());

    DtoDhcpHost host2 = new DtoDhcpHost();
    host2.setMacAddr("02:33:44:55:00:01");
    host2.setIpAddr("172.31.0.12");
    host2.setName("jupiter");
    List<DtoExtraDhcpOpt> opts2 = new ArrayList<>();
    opts2.add(new DtoExtraDhcpOpt("name1", "val1"));
    opts2.add(new DtoExtraDhcpOpt("name2", "val2"));
    opts2.add(new DtoExtraDhcpOpt("name3", "val3"));
    host2.setExtraDhcpOpts(opts2);
    response =
        resource()
            .uri(subnet.getHosts())
            .type(APPLICATION_DHCP_HOST_JSON_V2)
            .post(ClientResponse.class, host2);
    assertEquals(201, response.getStatus());
    host2 =
        resource()
            .uri(response.getLocation())
            .accept(APPLICATION_DHCP_HOST_JSON_V2)
            .get(DtoDhcpHost.class);
    assertEquals("02:33:44:55:00:01", host2.getMacAddr());
    assertEquals("172.31.0.12", host2.getIpAddr());
    assertEquals("jupiter", host2.getName());
    assertEquals(opts, host2.getExtraDhcpOpts());

    // Now list all the host static assignments.
    response =
        resource()
            .uri(subnet.getHosts())
            .accept(APPLICATION_DHCP_HOST_COLLECTION_JSON_V2)
            .get(ClientResponse.class);
    assertEquals(200, response.getStatus());

    DtoDhcpHost[] hosts = response.getEntity(DtoDhcpHost[].class);
    assertThat("We expect 2 listed hosts.", hosts, arrayWithSize(2));
    assertThat(
        "We expect the listed hosts to match those we created.",
        hosts,
        arrayContainingInAnyOrder(host2, host1));

    // Now try to create a new host with host1's mac address. This should
    // fail.
    host1.setIpAddr("172.31.0.13");
    response =
        resource()
            .uri(subnet.getHosts())
            .type(APPLICATION_DHCP_HOST_JSON_V2)
            .post(ClientResponse.class, host1);
    assertEquals(409, response.getStatus());

    // Try again, this time using an UPDATE operation.
    response =
        resource()
            .uri(host1.getUri())
            .type(APPLICATION_DHCP_HOST_JSON_V2)
            .put(ClientResponse.class, host1);
    assertEquals(204, response.getStatus());
    host1 =
        resource().uri(host1.getUri()).accept(APPLICATION_DHCP_HOST_JSON_V2).get(DtoDhcpHost.class);
    assertEquals("02:33:44:55:00:00", host1.getMacAddr());
    assertEquals("172.31.0.13", host1.getIpAddr());
    assertEquals("saturn", host1.getName());

    // There should still be exactly 2 host assignments.
    response =
        resource()
            .uri(subnet.getHosts())
            .accept(APPLICATION_DHCP_HOST_COLLECTION_JSON_V2)
            .get(ClientResponse.class);
    assertEquals(200, response.getStatus());
    hosts = response.getEntity(DtoDhcpHost[].class);
    assertThat("We expect 2 listed hosts.", hosts, arrayWithSize(2));
    assertThat(
        "We expect the listed hosts to match those we created.",
        hosts,
        arrayContainingInAnyOrder(host1, host2));

    // Now delete one of the host assignments.
    response = resource().uri(host1.getUri()).delete(ClientResponse.class);
    assertEquals(204, response.getStatus());
    // There should now be only 1 host assignment.
    response =
        resource()
            .uri(subnet.getHosts())
            .accept(APPLICATION_DHCP_HOST_COLLECTION_JSON_V2)
            .get(ClientResponse.class);
    assertEquals(200, response.getStatus());
    hosts = response.getEntity(DtoDhcpHost[].class);
    assertThat("We expect 1 listed host after the delete", hosts, arrayWithSize(1));
    assertThat(
        "The listed hosts should be the one that wasn't deleted.",
        hosts,
        arrayContainingInAnyOrder(host2));
  }
Пример #9
0
  @Test
  public void testDhcpRoutes() {
    ClientResponse response;

    DtoDhcpSubnet subnet1 = new DtoDhcpSubnet();
    subnet1.setSubnetPrefix("172.0.0.0");
    subnet1.setSubnetLength(24);
    subnet1.setDefaultGateway("172.0.0.254");
    subnet1.setServerAddr("172.0.0.118");
    subnet1.getOpt121Routes().add(new DtoDhcpOption121("172.31.1.0", 24, "172.0.0.253"));
    subnet1.getOpt121Routes().add(new DtoDhcpOption121("172.31.2.0", 24, "172.0.0.253"));
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet1);
    assertEquals(201, response.getStatus());
    DtoDhcpSubnet subnet2 =
        resource()
            .uri(response.getLocation())
            .accept(APPLICATION_DHCP_SUBNET_JSON)
            .get(DtoDhcpSubnet.class);

    // Copy the URIs from the GET to the DTO we used for create.
    subnet1.setHosts(subnet2.getHosts());
    subnet1.setUri(subnet2.getUri());
    // Now the DTOs should be identical.

    assertEquals(
        "The DhcpSubnet client dto from GET should be " + "identical to the one passed to create",
        subnet1,
        subnet2);

    // Now modify the routes and do an update.
    subnet1.getOpt121Routes().remove(0);
    subnet1.getOpt121Routes().add(new DtoDhcpOption121("172.31.3.0", 24, "172.0.0.252"));
    subnet1.getOpt121Routes().add(new DtoDhcpOption121("172.31.4.0", 24, "172.0.0.253"));
    subnet1.setDefaultGateway("172.0.0.1");
    response =
        resource()
            .uri(subnet1.getUri())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .put(ClientResponse.class, subnet1);
    assertEquals(204, response.getStatus());
    subnet2 =
        resource()
            .uri(subnet1.getUri())
            .accept(APPLICATION_DHCP_SUBNET_JSON)
            .get(DtoDhcpSubnet.class);
    // The URIs should not have changed, so the DTOs should be identical.
    assertEquals(
        "The DhcpSubnet client dto from GET should be " + "identical to the one passed to create",
        subnet1,
        subnet2);

    // Now try removing all routes.
    subnet1.getOpt121Routes().clear();
    subnet1.setDefaultGateway(null);
    response =
        resource()
            .uri(subnet1.getUri())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .put(ClientResponse.class, subnet1);
    assertEquals(204, response.getStatus());
    subnet2 =
        resource()
            .uri(subnet1.getUri())
            .accept(APPLICATION_DHCP_SUBNET_JSON)
            .get(DtoDhcpSubnet.class);
    // The URIs should not have changed, so the DTOs should be identical.
    assertEquals(
        "The DhcpSubnet client dto from GET should be " + "identical to the one passed to create",
        subnet1,
        subnet2);
  }
Пример #10
0
  // @Test
  public void testSubnetCreateGetListDelete() {
    ClientResponse response;

    // Create a subnet
    DtoDhcpSubnet subnet1 = new DtoDhcpSubnet();
    subnet1.setSubnetPrefix("172.31.0.0");
    subnet1.setSubnetLength(24);
    subnet1.setServerAddr("172.31.0.118");
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet1);
    assertEquals(201, response.getStatus());
    // Test GET
    subnet1 =
        resource()
            .uri(response.getLocation())
            .accept(APPLICATION_DHCP_SUBNET_JSON)
            .get(DtoDhcpSubnet.class);
    assertEquals("172.31.0.0", subnet1.getSubnetPrefix());
    assertEquals(24, subnet1.getSubnetLength());

    // Create another subnet
    DtoDhcpSubnet subnet2 = new DtoDhcpSubnet();
    subnet2.setSubnetPrefix("172.31.1.0");
    subnet2.setSubnetLength(24);
    subnet2.setServerAddr("172.31.1.118");
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .type(APPLICATION_DHCP_SUBNET_JSON)
            .post(ClientResponse.class, subnet2);
    assertEquals(201, response.getStatus());
    subnet2 =
        resource()
            .uri(response.getLocation())
            .accept(APPLICATION_DHCP_SUBNET_JSON)
            .get(DtoDhcpSubnet.class);
    assertEquals("172.31.1.0", subnet2.getSubnetPrefix());
    assertEquals(24, subnet2.getSubnetLength());

    // List the subnets
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .accept(APPLICATION_DHCP_SUBNET_COLLECTION_JSON)
            .get(ClientResponse.class);
    assertEquals(200, response.getStatus());
    DtoDhcpSubnet[] subnets = response.getEntity(DtoDhcpSubnet[].class);
    assertThat("We expect 2 listed subnets.", subnets, arrayWithSize(2));
    assertThat(
        "We expect the listed subnets to match those we created.",
        subnets,
        arrayContainingInAnyOrder(subnet1, subnet2));

    // Delete the first subnet
    response = resource().uri(subnet1.getUri()).delete(ClientResponse.class);
    assertEquals(204, response.getStatus());
    // There should now be only the second subnet.
    response =
        resource()
            .uri(bridge.getDhcpSubnets())
            .accept(APPLICATION_DHCP_SUBNET_COLLECTION_JSON)
            .get(ClientResponse.class);
    assertEquals(200, response.getStatus());
    subnets = response.getEntity(DtoDhcpSubnet[].class);
    assertThat("We expect 1 listed subnet after the delete", subnets, arrayWithSize(1));
    assertThat(
        "The listed subnet should be the one that wasn't deleted.",
        subnets,
        arrayContainingInAnyOrder(subnet2));

    // Test GET of a non-existing subnet (the deleted first subnet).
    response =
        resource()
            .uri(subnet1.getUri())
            .accept(APPLICATION_DHCP_SUBNET_JSON)
            .get(ClientResponse.class);
    assertEquals(404, response.getStatus());
  }