def test_suggest_range_invalid(self): prefix = IP("10.0.0.0/24") prefixlen = 23 candidates = suggest_range(prefix, prefixlen)["candidates"] # a too large range should only return the original prefix self.assertEqual(len(candidates), 1) self.assertEqual(IP(candidates[0]["prefix"]), prefix)
def test_suggest_range_valid(self): prefix = IP("10.0.0.0/8") prefixlen = 24 n = 16 suggested_ranges = suggest_range(prefix, prefixlen, n=n) self.assertEqual(len(suggested_ranges["candidates"]), 16) # make sure all suggestions are within bounds for suggested_range in suggested_ranges["candidates"]: self.assertTrue(suggested_range["prefix"] in prefix)
def suggest(self, request, *args, **kwargs): "Suggests subnets of size=?number_of_hosts for ?prefix" params = SuggestParams(data=request.query_params) if not params.is_valid(): return Response(data=params.errors, status=status.HTTP_400_BAD_REQUEST) params = params.validated_data payload = suggest_range(params["prefix"], offset=params["offset"], prefixlen=params["prefixlen"], n=params["n"]) return Response(payload, status=status.HTTP_200_OK)