def test_setup_generates_dataset(self): """ `WriteRequestLoadScenario` starts and stops without collapsing. """ c = Clock() cluster = self.make_cluster(self.get_fake_flocker_client_instance()) s = WriteRequestLoadScenario(c, cluster, 5, sample_size=3) def assert_created(returned_datasets): self.assertNotEqual(returned_datasets, []) # Create a datasest and verify we get a success d = s._create_dataset(self.node1) self.successResultOf(d) # Verify that a dataset is actually being created d2 = s.control_service.list_datasets_configuration() d2.addCallback(assert_created) s.stop()
def test_write_request_load_succeeds(self): """ WriteRequestLoadScenario starts and stops without collapsing. """ c = Clock() cluster = self.make_cluster(self.get_fake_flocker_client_instance()) sample_size = 5 s = WriteRequestLoadScenario(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): """ `WriteRequestLoadScenario` should timeout if the outstanding requests for the scenarion do not complete within the specified time. """ c = Clock() control_service = self.get_error_response_client(c) cluster = self.make_cluster(control_service) sample_size = 5 s = WriteRequestLoadScenario(c, cluster, request_rate=10, sample_size=sample_size) # Set the delay for the requests to be longer than the scenario # timeout control_service.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)) control_service.fail_requests = True c.advance(1) control_service.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): """ `WriteRequestLoadScenario` should only be considered as stopped when all outstanding requests made by it have completed. """ c = Clock() control_service = self.get_error_response_client(c) cluster = self.make_cluster(control_service) delay = 1 control_service.delay = delay sample_size = 5 s = WriteRequestLoadScenario(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. control_service.fail_requests = True c.advance(1) control_service.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): """ `WriteRequestLoadScenario` should timeout if the outstanding requests for the scenarion do not complete within the specified time. """ c = Clock() control_service = self.get_error_response_client(c) cluster = self.make_cluster(control_service) sample_size = 5 s = WriteRequestLoadScenario( c, cluster, request_rate=10, sample_size=sample_size ) # Set the delay for the requests to be longer than the scenario # timeout control_service.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)) control_service.fail_requests = True c.advance(1) control_service.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): """ `WriteRequestLoadScenario` should only be considered as stopped when all outstanding requests made by it have completed. """ c = Clock() control_service = self.get_error_response_client(c) cluster = self.make_cluster(control_service) delay = 1 control_service.delay = delay sample_size = 5 s = WriteRequestLoadScenario( 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. control_service.fail_requests = True c.advance(1) control_service.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)