def test_can_run_simple_project(self): temp_path = mkdtemp() team = TeamFactory.create() TeamFactory.add_projects(team, 1) user = team.owner project = team.projects[0] load_test = LoadTestFactory.add_to_project(1, user=user, team=team, project=project, base_url="%s/healthcheck" % self.base_url, simple=True) runner = BenchRunner() runner.run_project_tests(temp_path, str(load_test.uuid), duration=1) loaded = LoadTest.objects(uuid=load_test.uuid).first() expect(loaded).not_to_be_null() expect(loaded.status).to_equal("Finished") expect(loaded.results).to_length(1) expect(loaded.results[0].log).not_to_be_null() expect(loaded.results[0].status).to_equal("Successful") expect(loaded.results[0].config.module).to_equal("test_simple") expect(loaded.results[0].config.class_name).to_equal("SimpleTestTest") expect(loaded.results[0].config.test_name).to_equal("test_simple")
def test_get_return_200_if_not_team_owner(self): self._add_results() user = UserFactory.create(with_token=True) TeamFactory.create(owner=user) url = "/results/%s/%s/%s/%s/%s" % (self.team.name, self.project.name, self.config.module, self.config.class_name, self.config.test_name) response = self.fetch_with_headers(url) expect(response.code).to_equal(200)
def test_can_run_project(self): temp_path = mkdtemp() team = TeamFactory.create(name="teste") TeamFactory.add_projects(team, 1) user = team.owner project = team.projects[0] project.repository = "git://github.com/heynemann/wight.git" load_test = LoadTestFactory.add_to_project(1, user=user, team=team, project=project, base_url=self.base_url) runner = BenchRunner() runner.run_project_tests(temp_path, str(load_test.uuid), duration=1) loaded = LoadTest.objects(uuid=load_test.uuid).first() expect(loaded).not_to_be_null() expect(loaded.status).to_equal("Finished") expect(loaded.results).to_length(2) expect(loaded.results[0].log).not_to_be_null() expect(loaded.results[0].status).to_equal("Successful")
def test_delete_a_project(self): team = TeamFactory.create() TeamFactory.add_projects(team, 1) project = team.projects[0] team.delete_project(project.name) retrieved = Team.objects.filter(name=team.name).first() expect(retrieved.projects).to_length(0)
def test_get_return_200_if_not_team_owner(self): self._add_results_for_last() user = UserFactory.create(with_token=True) TeamFactory.create(owner=user) url = "/load-test-result/%s/last/" % self.load_test2.results[1].uuid response = self.fetch_with_headers(url) expect(response.code).to_equal(200)
def test_get_return_200_if_not_team_owner_but_team_member(self): TeamFactory.add_members(self.team, 1, with_token=True) self.user = self.team.members[0] url = "/teams/%s/projects/%s/load_tests/?quantity=20" % ( self.team.name, self.project.name) response = self.fetch_with_headers(url) expect(response.code).to_equal(200)
def test_can_run_funkload(self): team = TeamFactory.create() TeamFactory.add_projects(team, 1) user = team.owner project = team.projects[0] load_test = LoadTestFactory.add_to_project(1, user=user, team=team, project=project) load_test.pressure = "small" conf = WightConfig.load(join(root_path, 'bench', 'wight.yml')) test = conf.tests[0] DEFAULT_CYCLES = { "small": [10, 20], "medium": [10, 20, 30], "large": [30, 75, 100], } fl_result = FunkLoadBenchRunner.run(root_path, test, self.base_url, cycles=DEFAULT_CYCLES, duration=5) expect(fl_result).not_to_be_null() expect(fl_result.exit_code).to_equal(0) expect(fl_result.text).to_include("SUCCESSFUL") expect(fl_result.log).to_be_empty() expect(fl_result.result).not_to_be_null() expect(fl_result.config).not_to_be_null() result = LoadTest.get_data_from_funkload_results(fl_result.config, fl_result.result) load_test.add_result(result, fl_result.text) expect(load_test.results).to_length(1)
def test_get_user_info(self): team_owner = TeamFactory(owner=self.user) team_member = TeamFactory(members=[self.user]) response = self.fetch_with_headers("/user/info/%s" % self.user.email) expect(response.code).to_equal(200) body = response.body if isinstance(body, six.binary_type): body = body.decode('utf-8') body = loads(body) expect(body['user']['email']).to_equal(self.user.email) owner_team = [ team for team in body['user']['teams'] if team['role'] == 'owner' ] member_team = [ team for team in body['user']['teams'] if team['role'] == 'member' ] expect(owner_team).to_length(1) expect(member_team).to_length(1) expect(owner_team[0]['name']).to_equal(team_owner.name) expect(member_team[0]['name']).to_equal(team_member.name)
def setUp(self): super(DeleteTeamProjectTest, self).setUp() self.user = UserFactory.create(with_token=True) self.team = TeamFactory.create(owner=self.user) TeamFactory.add_projects(self.team, 1) TeamFactory.add_members(self.team, 2) self.project = self.team.projects[0]
def test_update_a_project_with_repository(self): team = TeamFactory.create() TeamFactory.add_projects(team, 1) project = team.projects[0] team.update_project(project.name, new_repository="new-repository") retrieved = Team.objects.filter(name=team.name).first() expect(retrieved.projects[0].name).to_equal(project.name) expect(retrieved.projects[0].repository).to_equal("new-repository")
def test_update_a_project_with_name(self): team = TeamFactory.create() TeamFactory.add_projects(team, 1) project = team.projects[0] team.update_project(project.name, "new-name") retrieved = Team.objects.filter(name=team.name).first() expect(retrieved.projects[0].name).to_equal("new-name") expect(retrieved.projects[0].repository).to_equal(project.repository)
def test_get_return_200_if_not_team_owner(self): self._add_results() user = UserFactory.create(with_token=True) TeamFactory.create(owner=user) url = "/results/%s/%s/%s/%s/%s" % ( self.team.name, self.project.name, self.config.module, self.config.class_name, self.config.test_name) response = self.fetch_with_headers(url) expect(response.code).to_equal(200)
def test_get_last_3_load_tests_for_all_projects_when_owner(self): LoadTestFactory.add_to_project(4, user=self.user, team=self.team, project=self.project) LoadTestFactory.add_to_project(4, user=self.user, team=self.team, project=self.team.projects[1]) team = TeamFactory.create(owner=self.user) TeamFactory.add_projects(team, 1) LoadTestFactory.add_to_project(4, user=self.user, team=team, project=team.projects[0]) LoadTestFactory.add_to_project(4, user=UserFactory.create()) loaded_tests = list(LoadTest.get_by_user(self.user)) expect(loaded_tests).to_length(9)
def test_can_create_team_with_members(self): team = TeamFactory.create() TeamFactory.add_members(team, 1) retrieved = Team.objects(id=team.id) expect(retrieved.count()).to_equal(1) expect(retrieved.first().name).to_equal(team.name) expect(retrieved.first().members).to_length(1) expect(retrieved.first().members[0].email).to_equal(team.members[0].email)
def test_get_project_by_team_should_be_a_equal_to_project_dict(self): TeamFactory.add_projects(self.team, 2) project = self.team.projects[1] response = self.fetch_with_headers("/teams/%s/projects/%s" % (self.team.name, project.name)) expect(response.code).to_equal(200) obj = response.body if isinstance(obj, six.binary_type): obj = obj.decode('utf-8') expect(loads(obj)).to_be_like(project.to_dict())
def setUp(self): super(ShowTestResultForTeamProjectAndTestTest, self).setUp() self.user = UserFactory.create(with_token=True) self.team = TeamFactory.create(owner=self.user) TeamFactory.add_projects(self.team, 2) self.project = self.team.projects[0] self.load_test = LoadTestFactory.create(created_by=self.user, team=self.team, project_name=self.project.name, status="Finished") self.load_test.save() self.config = TestConfigurationFactory.build() self.config2 = TestConfigurationFactory.build()
def setUp(self): super(ShowLoadLastTestResultTest, self).setUp() self.user = UserFactory.create(with_token=True) self.team = TeamFactory.create(owner=self.user) TeamFactory.add_projects(self.team, 1) self.project = self.team.projects[0] self.load_test = LoadTestFactory.create(created_by=self.user, team=self.team, project_name=self.project.name, status="Finished") self.load_test.results.append(TestResultFactory.build()) self.load_test.save() self.result = self.load_test.results[0]
def test_can_create_project_being_a_member(self): team = TeamFactory.create() TeamFactory.add_members(team, 2) team.add_project(name="test-can-create-project-being-a-member", repository="repo", created_by=team.members[0]) retrieved = Team.objects.filter(name=team.name).first() expect(retrieved).not_to_be_null() expect(retrieved.projects).to_length(1) expect(retrieved.projects[0].name).to_equal(team.projects[0].name) expect(retrieved.projects[0].repository).to_equal(team.projects[0].repository)
def test_can_create_team_with_members(self): team = TeamFactory.create() TeamFactory.add_members(team, 1) retrieved = Team.objects(id=team.id) expect(retrieved.count()).to_equal(1) expect(retrieved.first().name).to_equal(team.name) expect(retrieved.first().members).to_length(1) expect(retrieved.first().members[0].email).to_equal( team.members[0].email)
def setUp(self): super(ShowAuthLoadTestResultTest, self).setUp() self.user = UserFactory.create(with_token=True) self.team = TeamFactory.create(owner=self.user) TeamFactory.add_projects(self.team, 1) self.project = self.team.projects[0] self.load_test = LoadTestFactory.create(created_by=self.user, team=self.team, project_name=self.project.name) self.load_test.results.append(TestResultFactory.build()) self.load_test.save() self.result = self.load_test.results[0]
def test_list_load_tests_by_team_and_project(self): team = TeamFactory.create(owner=self.user) TeamFactory.add_projects(team, 1) project = team.projects[0] LoadTestFactory.add_to_project(25, user=self.user, team=team, project=project) load_tests = LoadTest.get_sliced_by_team_and_project_name(team, project.name, 20) uuids = _get_print_lines_for_load_tests(load_tests) result = self.execute("list", team=team.name, project=project.name) expect(result).to_be_like(BASE_LOAD_TESTS_TABLE_PRINT % (team.name, project.name, "".join(uuids)))
def test_can_git_clone_in_specific_branch(self, run_config_mock, load_config_mock, validate_mock, save_mock, clone_mock): team = TeamFactory.create() TeamFactory.add_projects(team, 1) user = team.owner project = team.projects[0] load_test = LoadTestFactory.add_to_project(1, user=user, team=team, project=project, branch="test") runner = BenchRunner() runner.run_project_tests("some-path-doesnt-matter", str(load_test.uuid), duration=1) expect(clone_mock.call_args_list[0][1]['branch']).to_be_like( "test" )
def test_can_git_clone_in_specific_branch( self, run_config_mock, load_config_mock, validate_mock, save_mock, clone_mock ): team = TeamFactory.create() TeamFactory.add_projects(team, 1) user = team.owner project = team.projects[0] load_test = LoadTestFactory.add_to_project(1, user=user, team=team, project=project, branch="test") runner = BenchRunner() runner.run_project_tests("some-path-doesnt-matter", str(load_test.uuid), duration=1) expect(clone_mock.call_args_list[0][1]["branch"]).to_be_like("test")
def test_get_project_by_team_should_be_a_json(self): TeamFactory.add_projects(self.team, 2) project = self.team.projects[1] response = self.fetch_with_headers("/teams/%s/projects/%s" % (self.team.name, project.name)) expect(response.code).to_equal(200) obj = response.body if isinstance(obj, six.binary_type): obj = obj.decode('utf-8') try: loads(obj) assert True except ValueError: raise AssertionError("Should be possible to load a json from response")
def test_can_create_project_being_a_member(self): team = TeamFactory.create() TeamFactory.add_members(team, 2) team.add_project(name="test-can-create-project-being-a-member", repository="repo", created_by=team.members[0]) retrieved = Team.objects.filter(name=team.name).first() expect(retrieved).not_to_be_null() expect(retrieved.projects).to_length(1) expect(retrieved.projects[0].name).to_equal(team.projects[0].name) expect(retrieved.projects[0].repository).to_equal( team.projects[0].repository)
def test_show_memberships(self): t1 = TeamFactory.create(owner=self.user) t2 = TeamFactory.create(members=[self.user]) result = self.execute("user-info") expected = ("""User: %s +--------+--------+ | team | role | +--------+--------+ | %s | owner | | %s | member | +--------+--------+ """ % (self.user.email, t1.name, t2.name)).replace('-', '') expect(result.replace('-', '')).to_be_like(expected)
def test_get_project_by_team_should_be_a_json(self): TeamFactory.add_projects(self.team, 2) project = self.team.projects[1] response = self.fetch_with_headers("/teams/%s/projects/%s" % (self.team.name, project.name)) expect(response.code).to_equal(200) obj = response.body if isinstance(obj, six.binary_type): obj = obj.decode('utf-8') try: loads(obj) assert True except ValueError: raise AssertionError( "Should be possible to load a json from response")
def test_can_schedule_in_specific_branch(self): team = TeamFactory.create(owner=self.user) TeamFactory.add_projects(team, 2) project_name = team.projects[0].name result = self.execute("schedule", team=team.name, project=project_name, url="http://www.globo.com", branch="test-branch") expect(result).to_be_like( "Scheduled a new load test for project '%s' (branch '%s') in team '%s' at '%s' target." % ( project_name, "test-branch", team.name, self.target ) ) load_test = LoadTest.objects.filter(team=team, project_name=project_name).first() expect(load_test).not_to_be_null() expect(load_test.git_branch).to_equal("test-branch")
def test_team_update_delete_permissions(client, TwoChallengeSets, view): team = TeamFactory( challenge=TwoChallengeSets.ChallengeSet1.challenge, owner=TwoChallengeSets.ChallengeSet1.participant, ) TeamFactory( challenge=TwoChallengeSets.ChallengeSet1.challenge, owner=TwoChallengeSets.ChallengeSet1.participant1, ) validate_owner_or_admin_view( viewname=view, reverse_kwargs={'pk': team.pk}, two_challenge_set=TwoChallengeSets, client=client, )
def test_add_team_member_twice(self): user = UserFactory.create() team = TeamFactory.create(owner=self.user, members=[user]) response = self.patch("/teams/%s/members" % team.name, user=user.email) expect(response.code).to_equal(409) expect(response.body).to_equal("User already team member")
def test_add_non_existent_user(self): team = TeamFactory.create(owner=self.user) response = self.patch("/teams/%s/members" % team.name, user="******") expect(response.code).to_equal(400) expect(response.body).to_equal("User not found")
def test_try_delete_team_without_auth(self): team = TeamFactory.create(owner=self.user) self.user = None response = self.delete("/teams/anything") expect(response.code).to_equal(401) team = Team.objects.filter(name=team.name).first() expect(team).not_to_be_null()
def setUp(self): super(ScheduleLoadTestTest, self).setUp() self.user = UserFactory.create(with_token=True) self.team = TeamFactory.create(owner=self.user) self.project = self.team.add_project("schedule-test-project-1", "repo", self.user)
def test_schedule_test_without_being_a_member(self): team = TeamFactory.create() prj = team.add_project("bla", "repo", team.owner) url = "/teams/%s/projects/%s/load_tests/" % (team.name, prj.name) response = self.post(url, **{"base_url": "http://www.globo.com"}) expect(response.code).to_equal(403)
def test_load_test_instance(self): team = TeamFactory.create(owner=self.user) project = team.add_project("load-test-instace-acc-1", "repo", self.user) load_test = LoadTestFactory.create(created_by=team.owner, team=team, project_name=project.name) result1 = TestResultFactory.build() result2 = TestResultFactory.build() load_test.results.append(result1) load_test.results.append(result2) load_test.save() result = self.execute("show", load_test.uuid) expected_text = [ result1.config.title, result1.cycles[-1].concurrent_users, result1.cycles[-1].request.successful_requests_per_second, result1.cycles[-1].request.p95, result1.cycles[-1].request.failed_requests, result1.uuid, result2.config.title, result2.cycles[-1].concurrent_users, result2.cycles[-1].request.successful_requests_per_second, result2.cycles[-1].request.p95, result2.cycles[-1].request.failed_requests, result2.uuid, load_test.uuid, load_test.status ] for expected in expected_text: expect(result).to_include(expected)
def test_create_project_with_same_name_in_different_teams(self): team = TeamFactory.create() team2 = TeamFactory.create() team.add_project(name="test-can-create-project", repository="repo", created_by=team.owner) team2.add_project(name="test-can-create-project", repository="repo", created_by=team2.owner) retrieved = Team.objects.filter(name=team.name).first() expect(retrieved).not_to_be_null() expect(retrieved.projects).to_length(1) expect(retrieved.projects[0].name).to_equal(team.projects[0].name) retrieved = Team.objects.filter(name=team2.name).first() expect(retrieved).not_to_be_null() expect(retrieved.projects).to_length(1) expect(retrieved.projects[0].name).to_equal(team2.projects[0].name)
def test_add_owner_as_a_member(self): team = TeamFactory.create(owner=self.user) response = self.patch("/teams/%s/members" % team.name, user=self.user.email) expect(response.code).to_equal(409) expect(response.body).to_equal("User already team owner")
def test_update_or_create(monkeypatch, db): user = UserFactory() team_1 = TeamFactory(name=("Team 1"), _base_log_user=user) team_2 = TeamFactory(name=("Team 2"), _base_log_user=user) player = PlayerFactory(name=(player_name := "Player"), team=team_1, _base_log_user=user) def save_signal(sender, **kwargs): assert sender == Player assert kwargs["obj"].pk is player.pk assert kwargs["obj"].name == player_name assert kwargs["obj"].team == team_2 assert kwargs["user"] == user monkeypatch.setattr("django_base_model.signals.base_create.send", save_signal) Player.objects.update_or_create(name=player_name, team=team_1, defaults={"team": team_2}, _base_log_user=user) assert Player.objects.count() == 1 new_player_name = "Player 2" def save_signal(sender, **kwargs): assert sender == Player assert kwargs["obj"].pk is not None assert kwargs["obj"].name == new_player_name assert kwargs["obj"].team == team_2 assert kwargs["user"] == user monkeypatch.setattr("django_base_model.signals.base_create.send", save_signal) Player.objects.update_or_create( name=new_player_name, team=team_1, defaults={"team": team_2}, _base_log_user=user, ) assert Player.objects.count() == 2
def main(args=None): if args is None: args = sys.argv[1:] parser = argparse.ArgumentParser() parser.add_argument('--conf', '-c', default=DEFAULT_CONFIG_PATH, help="Path to configuration file.") options = parser.parse_args(args) config = Config.load(path=options.conf, conf_name=split(options.conf)[-1], lookup_paths=[ os.curdir, expanduser('~'), '/etc/', ]) connect( config.MONGO_DB, host=config.MONGO_HOST, port=config.MONGO_PORT, username=config.MONGO_USER, password=config.MONGO_PASS ) user = UserFactory.create() team = TeamFactory.create(owner=user) TeamFactory.add_projects(team, 1) project = team.projects[0] config = TestConfigurationFactory.build() load_test1 = LoadTestFactory.add_to_project(1, user=user, team=team, project=project) load_test1.results.append(TestResultFactory.build(config=config)) load_test1.save() print "load test 1: %s" % load_test1.uuid print "test result for load test 1: %s" % load_test1.results[0].uuid load_test2 = LoadTestFactory.add_to_project(1, user=user, team=team, project=project) load_test2.results.append(TestResultFactory.build(config=config)) load_test2.results.append(TestResultFactory.build()) load_test2.save() load_test3 = LoadTestFactory.add_to_project(1, user=user, team=team, project=project) load_test3.results.append(TestResultFactory.build(config=config)) load_test3.save() load_test4 = LoadTestFactory.add_to_project(1, user=user, team=team, project=project) load_test4.results.append(TestResultFactory.build(config=config)) load_test4.save() print "load test 2: %s" % load_test2.uuid print "test result 1 for load test 2: %s" % load_test2.results[0].uuid print "test result 2 for load test 2: %s" % load_test2.results[1].uuid print "url for trend: %s/%s/%s/%s/%s/" % (team.name, project.name, config.module, config.class_name, config.test_name)
def test_get_return_403_if_not_team_owner(self): user = UserFactory.create(with_token=True) team = TeamFactory.create(owner=user) url = "/teams/%s/projects/%s/load-tests/%s/results/some-result-uuid" % ( team.name, self.project.name, self.load_test.uuid ) response = self.fetch_with_headers(url) expect(response.code).to_equal(403)
def test_update_team_to_empty_name(self): team = TeamFactory.create(owner=self.user) response = self.put("/teams/%s" % team.name, name="") expect(response.code).to_equal(400) response = self.put("/teams/%s" % team.name) expect(response.code).to_equal(400)
def test_can_create_empty_team(self): team = TeamFactory.create() retrieved = Team.objects(id=team.id) expect(retrieved.count()).to_equal(1) expect(retrieved.first().name).to_equal(team.name) expect(retrieved.first().owner.id).to_equal(team.owner.id)
def test_can_update_team(self): team = TeamFactory.create(owner=self.user) result = self.execute("team-update", team.name, "new-team-name") expect(result).to_be_like("Updated '%s' team to 'new-team-name' in '%s' target." % (team.name, self.target)) team = Team.objects.filter(name="new-team-name").first() expect(team).not_to_be_null()
def test_try_to_delete_a_not_owner_team(self): team = TeamFactory.create(owner=UserFactory.create(with_token=True)) response = self.delete("/teams/%s" % team.name) expect(response.code).to_equal(403) team = Team.objects.filter(name=team.name).first() expect(team).not_to_be_null()
def test_can_create_a_load_test_if_team_member(self): TeamFactory.add_members(self.team, 1) user = self.team.members[0] test = LoadTestFactory.create( created_by=user, team=self.team, project_name=self.project.name ) retrieveds = LoadTest.objects(id=test.id) expect(retrieveds.count()).to_equal(1) retrieved = retrieveds.first() expect(retrieved.status).to_equal("Scheduled") expect(retrieved.created_by.email).to_equal(user.email) expect(retrieved.team.name).to_equal(self.team.name) expect(retrieved.project_name).to_equal(self.project.name) expect(retrieved.date_created).to_be_like(test.date_created) expect(retrieved.date_modified).to_be_like(test.date_modified)
def test_to_dict(self): team = TeamFactory.create() TeamFactory.add_members(team, 2) TeamFactory.add_projects(team, 2) expect(team.to_dict()).to_be_like({ "name": team.name, "owner": team.owner.email, "members": [ team.members[0].email, team.members[1].email, ], "projects": [ team.projects[0].to_dict(), team.projects[1].to_dict(), ] })
def test_can_remove_user(self): user = UserFactory.create() team = TeamFactory.create(owner=self.user, members=[user]) result = self.execute("team-removeuser", team.name, user.email) expect(result).to_be_like("User '%s' removed from Team '%s'." % (user.email, team.name)) team = Team.objects.filter(name=team.name).first() expect(team.members).not_to_include(user)