def test_read_request_load_succeeds(self): """ ReadRequestLoadScenario starts and stops without collapsing. """ c = Clock() node1 = Node(uuid=uuid4(), public_address=IPAddress('10.0.0.1')) node2 = Node(uuid=uuid4(), public_address=IPAddress('10.0.0.2')) cluster = BenchmarkCluster( node1.public_address, lambda reactor: FakeFlockerClient([node1, node2]), {node1.public_address, node2.public_address}, default_volume_size=DEFAULT_VOLUME_SIZE ) sample_size = 5 s = ReadRequestLoadScenario(c, cluster, sample_size=sample_size) d = s.start() # Request rate samples are recorded every second and we need to # collect enough samples to establish the rate which is defined # by `sample_size`. Therefore, advance the clock by # `sample_size` seconds to obtain enough samples. c.pump(repeat(1, sample_size)) s.maintained().addBoth(lambda x: self.fail()) d.addCallback(lambda ignored: s.stop()) self.successResultOf(d)
def test_read_request_load_succeeds(self): """ ReadRequestLoadScenario starts and stops without collapsing. """ c = Clock() node1 = Node(uuid=uuid4(), public_address=IPAddress('10.0.0.1')) node2 = Node(uuid=uuid4(), public_address=IPAddress('10.0.0.2')) cluster = BenchmarkCluster( node1.public_address, lambda reactor: FakeFlockerClient([node1, node2]), {node1.public_address, node2.public_address}, default_volume_size=DEFAULT_VOLUME_SIZE) sample_size = 5 s = ReadRequestLoadScenario(c, cluster, sample_size=sample_size) d = s.start() # Request rate samples are recorded every second and we need to # collect enough samples to establish the rate which is defined # by `sample_size`. Therefore, advance the clock by # `sample_size` seconds to obtain enough samples. c.pump(repeat(1, sample_size)) s.maintained().addBoth(lambda x: self.fail()) d.addCallback(lambda ignored: s.stop()) self.successResultOf(d)
def test_scenario_timeouts_if_requests_not_completed(self): """ `ReadRequestLoadScenario` should timeout if the outstanding requests for the scenarion do not complete within the specified time. """ c = Clock() cluster = self.make_cluster(RequestErrorFakeFlockerClient) sample_size = 5 s = ReadRequestLoadScenario(c, cluster, request_rate=10, sample_size=sample_size) # Set the delay for the requests to be longer than the scenario # timeout cluster.get_control_service(c).delay = s.timeout + 10 d = s.start() s.maintained().addBoth(lambda x: self.fail()) # Advance the clock by `sample_size` seconds to establish the # requested rate. c.pump(repeat(1, sample_size)) cluster.get_control_service(c).fail_requests = True c.advance(1) cluster.get_control_service(c).fail_requests = False d.addCallback(lambda ignored: s.stop()) # Advance the clock by the timeout value so it is triggered # before the requests complete. self.assertNoResult(d) c.advance(s.timeout + 1) self.assertTrue(s.rate_measurer.outstanding() > 0) self.successResultOf(d)
def test_scenario_stops_only_when_no_outstanding_requests(self): """ `ReadRequestLoadScenario` should only be considered as stopped when all outstanding requests made by it have completed. """ c = Clock() cluster = self.make_cluster(RequestErrorFakeFlockerClient) delay = 1 cluster.get_control_service(c).delay = delay sample_size = 5 s = ReadRequestLoadScenario(c, cluster, request_rate=10, sample_size=sample_size) d = s.start() s.maintained().addBoth(lambda x: self.fail()) # Advance the clock by `sample_size` seconds to establish the # requested rate. c.pump(repeat(1, sample_size)) # Force the control service to fail requests for one second. # These requests will fail after the delay period set in the # control service. cluster.get_control_service(c).fail_requests = True c.advance(1) cluster.get_control_service(c).fail_requests = False d.addCallback(lambda ignored: s.stop()) # The scenario should not successfully stop until after the # delay period for the failed requests. self.assertNoResult(d) c.advance(delay) self.successResultOf(d)
def test_scenario_timeouts_if_requests_not_completed(self): """ `ReadRequestLoadScenario` should timeout if the outstanding requests for the scenarion do not complete within the specified time. """ c = Clock() cluster = self.make_cluster(RequestErrorFakeFlockerClient) sample_size = 5 s = ReadRequestLoadScenario( c, cluster, request_rate=10, sample_size=sample_size ) # Set the delay for the requests to be longer than the scenario # timeout cluster.get_control_service(c).delay = s.timeout + 10 d = s.start() s.maintained().addBoth(lambda x: self.fail()) # Advance the clock by `sample_size` seconds to establish the # requested rate. c.pump(repeat(1, sample_size)) cluster.get_control_service(c).fail_requests = True c.advance(1) cluster.get_control_service(c).fail_requests = False d.addCallback(lambda ignored: s.stop()) # Advance the clock by the timeout value so it is triggered # before the requests complete. self.assertNoResult(d) c.advance(s.timeout + 1) self.assertTrue(s.rate_measurer.outstanding() > 0) self.successResultOf(d)
def test_scenario_stops_only_when_no_outstanding_requests(self): """ `ReadRequestLoadScenario` should only be considered as stopped when all outstanding requests made by it have completed. """ c = Clock() cluster = self.make_cluster(RequestErrorFakeFlockerClient) delay = 1 cluster.get_control_service(c).delay = delay sample_size = 5 s = ReadRequestLoadScenario( c, cluster, request_rate=10, sample_size=sample_size ) d = s.start() s.maintained().addBoth(lambda x: self.fail()) # Advance the clock by `sample_size` seconds to establish the # requested rate. c.pump(repeat(1, sample_size)) # Force the control service to fail requests for one second. # These requests will fail after the delay period set in the # control service. cluster.get_control_service(c).fail_requests = True c.advance(1) cluster.get_control_service(c).fail_requests = False d.addCallback(lambda ignored: s.stop()) # The scenario should not successfully stop until after the # delay period for the failed requests. self.assertNoResult(d) c.advance(delay) self.successResultOf(d)