def test_peek_with_auth_error(self): self.mock_cannot(user.Action.SEARCH_BUILDS) build = self.classic_build( builder=dict(project='chromium', bucket='try')) build.put() with self.assertRaises(auth.AuthorizationError): service.peek(bucket_ids=['chromium/try'])
def test_peek_with_paging(self): self.put_many_builds(builder=dict(project='chromium', bucket='try')) first_page, next_cursor = service.peek(bucket_ids=['chromium/try'], max_builds=10) self.assertTrue(first_page) self.assertTrue(next_cursor) second_page, _ = service.peek(bucket_ids=['chromium/try'], start_cursor=next_cursor) self.assertTrue(all(b not in second_page for b in first_page))
def test_peek_with_paging(self): self.put_many_builds() first_page, next_cursor = service.peek( buckets=[self.test_build.bucket]) self.assertTrue(first_page) self.assertTrue(next_cursor) second_page, _ = service.peek( buckets=[self.test_build.bucket], start_cursor=next_cursor) self.assertTrue(all(b not in second_page for b in first_page))
def test_pause_bucket(self): config.put_bucket( 'chromium', 'a' * 40, test_util.parse_bucket_cfg('name: "master.foo"'), ) config.put_bucket( 'chromium', 'a' * 40, test_util.parse_bucket_cfg('name: "master.bar"'), ) self.put_many_builds(5, builder=dict(project='chromium', bucket='master.foo')) self.put_many_builds(5, builder=dict(project='chromium', bucket='master.bar')) service.pause('chromium/master.foo', True) builds, _ = service.peek( ['chromium/master.foo', 'chromium/master.bar']) self.assertEqual(len(builds), 5) self.assertTrue( all(b.bucket_id == 'chromium/master.bar' for b in builds))
def peek(self, request): """Returns available builds.""" assert isinstance(request.bucket, list) builds, next_cursor = service.peek( request.bucket, max_builds=request.max_builds, start_cursor=request.start_cursor, ) return self.SearchResponseMessage(builds=map(build_to_message, builds), next_cursor=next_cursor)
def test_pause_then_unpause(self): build = self.classic_build( builder=dict(project='chromium', bucket='try')) build.put() config.put_bucket( 'chromium', 'a' * 40, test_util.parse_bucket_cfg('name: "ci"'), ) service.pause(build.bucket_id, True) service.pause(build.bucket_id, True) # Again, to cover equality case. builds, _ = service.peek([build.bucket_id]) self.assertEqual(len(builds), 0) service.pause(build.bucket_id, False) builds, _ = service.peek([build.bucket_id]) self.assertEqual(len(builds), 1)
def test_peek_multi(self): self.test_build.key = ndb.Key(model.Build, model.new_build_id()) self.test_build.put() # We test that peek returns builds in decreasing order of the build key. The # build key is derived from the inverted current time, so later builds get # smaller ids. Only exception: if the time is the same, randomness decides # the order. So artificially create an id here to avoid flakiness. build2 = model.Build(id=self.test_build.key.id() - 1, bucket='bucket2') build2.put() builds, _ = service.peek(buckets=[self.test_build.bucket, 'bucket2']) self.assertEqual(builds, [self.test_build, build2])
def peek(self, request): """Returns available builds.""" assert isinstance(request.bucket, list) builds, next_cursor = service.peek( request.bucket, max_builds=request.max_builds, start_cursor=request.start_cursor, ) return self.SearchResponseMessage( builds=map(build_to_message, builds), next_cursor=next_cursor)
def test_peek_multi(self): build1 = self.classic_build( id=1, builder=dict(project='chromium', bucket='try'), ) build2 = self.classic_build( id=2, builder=dict(project='chromium', bucket='try'), ) assert build1.bucket_id == build2.bucket_id ndb.put_multi([build1, build2]) builds, _ = service.peek(bucket_ids=['chromium/try']) self.assertEqual(builds, [build2, build1])
def test_pause_all_requested_buckets(self): config.put_bucket( 'chromium', 'a' * 40, test_util.parse_bucket_cfg('name: "master.foo"'), ) self.put_many_builds(5, builder=dict(project='chromium', bucket='master.foo')) service.pause('chromium/master.foo', True) builds, _ = service.peek(['chromium/master.foo']) self.assertEqual(len(builds), 0)
def test_peek_does_not_return_leased_builds(self): self.new_leased_build(builder=dict(project='chromium', bucket='try')) builds, _ = service.peek(['chromium/try']) self.assertFalse(builds)
def test_peek_with_bad_cursor(self): self.put_many_builds() with self.assertRaises(errors.InvalidInputError): service.peek(buckets=[self.test_build.bucket], start_cursor='abc')
def test_peek_without_buckets(self): with self.assertRaises(errors.InvalidInputError): service.peek(bucket_ids=[])
def test_peek_with_bad_cursor(self): self.put_many_builds(builder=dict(project='chromium', bucket='try')) with self.assertRaises(errors.InvalidInputError): service.peek(bucket_ids=['chromium/try'], start_cursor='abc')
def test_peek_without_buckets(self): with self.assertRaises(errors.InvalidInputError): service.peek(buckets=[])
def test_peek_200_builds(self): for _ in xrange(200): model.Build(bucket=self.test_build.bucket).put() builds, _ = service.peek([self.test_build.bucket], max_builds=200) self.assertTrue(len(builds) <= 100)
def test_peek_does_not_return_leased_builds(self): self.test_build.put() self.lease() builds, _ = service.peek([self.test_build.bucket]) self.assertFalse(builds)
def test_peek_with_auth_error(self): self.mock_cannot(acl.Action.SEARCH_BUILDS) self.test_build.put() with self.assertRaises(auth.AuthorizationError): service.peek(buckets=[self.test_build.bucket])
def test_peek(self): build = self.classic_build() build.put() builds, _ = service.peek(bucket_ids=[build.bucket_id]) self.assertEqual(builds, [build])
def test_peek(self): self.test_build.put() builds, _ = service.peek(buckets=[self.test_build.bucket]) self.assertEqual(builds, [self.test_build])