Merge remote-tracking branch 'upstream/master' into python-registry-v2

This commit is contained in:
Jake Moshenko 2015-09-04 16:32:01 -04:00
commit 210ed7cf02
148 changed files with 1829 additions and 445 deletions

Binary file not shown.

View file

@ -2,13 +2,15 @@ import unittest
from endpoints.v1 import v1_bp
from endpoints.verbs import verbs
from app import app
class TestAnonymousAccessChecked(unittest.TestCase):
def verifyBlueprint(self, blueprint):
class Checker(object):
def __init__(self, test_case):
self.test_case = test_case
self.first_registration = True
self.app = app
def add_url_rule(self, rule, endpoint, view_function, methods=None):
if (not '__anon_protected' in dir(view_function) and

View file

@ -1968,6 +1968,19 @@ class TestOrganizationMemberBuynlargeDevtable(ApiTestCase):
ApiTestCase.setUp(self)
self._set_url(OrganizationMember, orgname="buynlarge", membername="someuser")
def test_get_anonymous(self):
self._run_test('GET', 401, None, None)
def test_get_freshuser(self):
self._run_test('GET', 403, 'freshuser', None)
def test_get_reader(self):
self._run_test('GET', 403, 'reader', None)
def test_get_devtable(self):
self._run_test('GET', 404, 'devtable', None)
def test_delete_anonymous(self):
self._run_test('DELETE', 401, None, None)

View file

@ -878,6 +878,13 @@ class TestGetOrganizationMembers(ApiTestCase):
assert READ_ACCESS_USER in membernames
assert not NO_ACCESS_USER in membernames
for member in json['members']:
membername = member['name']
response = self.getJsonResponse(OrganizationMember,
params=dict(orgname=ORGANIZATION, membername=membername))
self.assertEquals(member, response)
class TestRemoveOrganizationMember(ApiTestCase):
def test_try_remove_only_admin(self):
@ -1759,8 +1766,55 @@ class TestRepoBuilds(ApiTestCase):
self.assertEquals(status_json['resource_key'], build['resource_key'])
self.assertEquals(status_json['trigger'], build['trigger'])
class TestRequestRepoBuild(ApiTestCase):
def test_requestrepobuild(self):
def test_requestbuild_noidurl(self):
self.login(ADMIN_ACCESS_USER)
# Request a (fake) build without a file ID or URL.
self.postResponse(RepositoryBuildList,
params=dict(repository=ADMIN_ACCESS_USER + '/simple'),
data=dict(),
expected_code=400)
def test_requestbuild_invalidurls(self):
self.login(ADMIN_ACCESS_USER)
# Request a (fake) build with and invalid URL.
self.postResponse(RepositoryBuildList,
params=dict(repository=ADMIN_ACCESS_USER + '/simple'),
data=dict(archive_url='foobarbaz'),
expected_code=400)
self.postResponse(RepositoryBuildList,
params=dict(repository=ADMIN_ACCESS_USER + '/simple'),
data=dict(archive_url='file://foobarbaz'),
expected_code=400)
def test_requestrepobuild_withurl(self):
self.login(ADMIN_ACCESS_USER)
# Ensure we are not yet building.
json = self.getJsonResponse(RepositoryBuildList,
params=dict(repository=ADMIN_ACCESS_USER + '/simple'))
assert len(json['builds']) == 0
# Request a (fake) build.
self.postResponse(RepositoryBuildList,
params=dict(repository=ADMIN_ACCESS_USER + '/simple'),
data=dict(archive_url='http://quay.io/robots.txt'),
expected_code=201)
# Check for the build.
json = self.getJsonResponse(RepositoryBuildList,
params=dict(repository=ADMIN_ACCESS_USER + '/simple'))
assert len(json['builds']) > 0
self.assertEquals('http://quay.io/robots.txt', json['builds'][0]['archive_url'])
def test_requestrepobuild_withfile(self):
self.login(ADMIN_ACCESS_USER)
# Ensure we are not yet building.
@ -1777,7 +1831,7 @@ class TestRequestRepoBuild(ApiTestCase):
# Check for the build.
json = self.getJsonResponse(RepositoryBuildList,
params=dict(repository=ADMIN_ACCESS_USER + '/building'))
params=dict(repository=ADMIN_ACCESS_USER + '/simple'))
assert len(json['builds']) > 0
@ -1888,6 +1942,8 @@ class TestRepositoryNotifications(ApiTestCase):
self.assertEquals('repo_push', json['event'])
self.assertEquals('webhook', json['method'])
self.assertEquals('http://example.com', json['config']['url'])
self.assertIsNone(json['title'])
wid = json['uuid']
# Get the notification.
@ -1897,6 +1953,7 @@ class TestRepositoryNotifications(ApiTestCase):
self.assertEquals(wid, json['uuid'])
self.assertEquals('repo_push', json['event'])
self.assertEquals('webhook', json['method'])
self.assertIsNone(json['title'])
# Verify the notification is listed.
json = self.getJsonResponse(RepositoryNotificationList,
@ -1915,6 +1972,29 @@ class TestRepositoryNotifications(ApiTestCase):
params=dict(repository=ADMIN_ACCESS_USER + '/simple', uuid=wid),
expected_code=404)
# Add another notification.
json = self.postJsonResponse(RepositoryNotificationList,
params=dict(repository=ADMIN_ACCESS_USER + '/simple'),
data=dict(config={'url': 'http://example.com'}, event='repo_push',
method='webhook', title='Some Notification'),
expected_code=201)
self.assertEquals('repo_push', json['event'])
self.assertEquals('webhook', json['method'])
self.assertEquals('http://example.com', json['config']['url'])
self.assertEquals('Some Notification', json['title'])
wid = json['uuid']
# Get the notification.
json = self.getJsonResponse(RepositoryNotification,
params=dict(repository=ADMIN_ACCESS_USER + '/simple', uuid=wid))
self.assertEquals(wid, json['uuid'])
self.assertEquals('repo_push', json['event'])
self.assertEquals('webhook', json['method'])
self.assertEquals('Some Notification', json['title'])
class TestListAndGetImage(ApiTestCase):
def test_listandgetimages(self):
@ -2759,7 +2839,7 @@ class FakeBuildTrigger(BuildTriggerHandler):
return self.config['dockerfile']
def list_field_values(self, field_name):
def list_field_values(self, field_name, limit=None):
if field_name == 'test_field':
return [1, 2, 3]

View file

@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
import unittest
from util.dockerfileparse import parse_dockerfile
class TestParsedDockerfile(unittest.TestCase):
def test_basic_parse(self):
parsed = parse_dockerfile("""
FROM someimage:latest
RUN dosomething
""")
self.assertEquals(("someimage", "latest"), parsed.get_image_and_tag())
self.assertEquals("someimage", parsed.get_base_image())
def test_basic_parse_notag(self):
parsed = parse_dockerfile("""
FROM someimage
RUN dosomething
""")
self.assertEquals(("someimage", "latest"), parsed.get_image_and_tag())
self.assertEquals("someimage", parsed.get_base_image())
def test_two_from_lines(self):
parsed = parse_dockerfile("""
FROM someimage:latest
FROM secondimage:second
""")
self.assertEquals(("secondimage", "second"), parsed.get_image_and_tag())
self.assertEquals("secondimage", parsed.get_base_image())
def test_parse_comments(self):
parsed = parse_dockerfile("""
# FROM someimage:latest
FROM anotherimage:foobar # This is a comment
RUN dosomething
""")
self.assertEquals(("anotherimage", "foobar"), parsed.get_image_and_tag())
self.assertEquals("anotherimage", parsed.get_base_image())
def test_unicode_parse_as_ascii(self):
parsed = parse_dockerfile("""
FROM someimage:latest
MAINTAINER José Schorr <jschorr@whatever.com>
""")
self.assertEquals(("someimage", "latest"), parsed.get_image_and_tag())
self.assertEquals("someimage", parsed.get_base_image())
def test_unicode_parse_as_unicode(self):
parsed = parse_dockerfile("""
FROM someimage:latest
MAINTAINER José Schorr <jschorr@whatever.com>
""".decode('utf-8'))
self.assertEquals(("someimage", "latest"), parsed.get_image_and_tag())
self.assertEquals("someimage", parsed.get_base_image())
if __name__ == '__main__':
unittest.main()

View file

@ -114,6 +114,9 @@ class JWTAuthTestCase(LiveServerTestCase):
self.assertIsNotNone(result)
# Confirm a user with the same internal and external username.
result, _ = self.jwt_auth.confirm_existing_user('cooluser', 'invalidpassword')
self.assertIsNone(result)
result, _ = self.jwt_auth.confirm_existing_user('cooluser', 'password')
self.assertIsNotNone(result)
self.assertEquals('cooluser', result.username)

View file

@ -112,6 +112,17 @@ class TestLDAP(unittest.TestCase):
(response, _) = self.ldap.confirm_existing_user('someuser', 'somepass')
self.assertEquals(response.username, 'someuser')
def test_invalid_password(self):
# Verify we cannot login with an invalid password.
(response, err_msg) = self.ldap.verify_and_link_user('someuser', 'invalidpass')
self.assertIsNone(response)
self.assertEquals(err_msg, 'Invalid password')
# Verify we cannot confirm the user.
(response, err_msg) = self.ldap.confirm_existing_user('someuser', 'invalidpass')
self.assertIsNone(response)
self.assertEquals(err_msg, 'Invalid user')
def test_missing_mail(self):
(response, err_msg) = self.ldap.verify_and_link_user('nomail', 'somepass')
self.assertIsNone(response)

View file

@ -14,37 +14,64 @@ class TestGeneratorFile(unittest.TestCase):
def test_basic_generator(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals(0, f.tell())
self.assertEquals("thisisatest", f.read())
self.assertEquals(len("thisisatest"), f.tell())
def test_same_lengths(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("this", f.read(4))
self.assertEquals(4, f.tell())
self.assertEquals("is", f.read(2))
self.assertEquals(6, f.tell())
self.assertEquals("a", f.read(1))
self.assertEquals(7, f.tell())
self.assertEquals("test", f.read(4))
self.assertEquals(11, f.tell())
def test_indexed_lengths(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisis", f.read(6))
self.assertEquals(6, f.tell())
self.assertEquals("atest", f.read(5))
self.assertEquals(11, f.tell())
def test_misindexed_lengths(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisis", f.read(6))
self.assertEquals(6, f.tell())
self.assertEquals("ate", f.read(3))
self.assertEquals(9, f.tell())
self.assertEquals("st", f.read(2))
self.assertEquals(11, f.tell())
self.assertEquals("", f.read(2))
self.assertEquals(11, f.tell())
def test_misindexed_lengths_2(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisisat", f.read(8))
self.assertEquals(8, f.tell())
self.assertEquals("e", f.read(1))
self.assertEquals(9, f.tell())
self.assertEquals("st", f.read(2))
self.assertEquals(11, f.tell())
self.assertEquals("", f.read(2))
self.assertEquals(11, f.tell())
def test_overly_long(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisisatest", f.read(60))
self.assertEquals(11, f.tell())
class TestUsernameGenerator(unittest.TestCase):

View file

@ -51,3 +51,5 @@ class TestConfig(DefaultConfig):
LICENSE_EXPIRATION_WARNING = datetime.now() + timedelta(weeks=520)
FEATURE_GITHUB_BUILD = True
CLOUDWATCH_NAMESPACE = None