Skip to content
This repository was archived by the owner on Sep 12, 2018. It is now read-only.

Commit cb59c0a

Browse files
author
Mangled Deutz
committed
Bring back workflow test
Workflow is usable again. Notes about how to use. Docker-DCO-1.1-Signed-off-by: Mangled Deutz <[email protected]> (github: dmp42)
1 parent 6049c54 commit cb59c0a

File tree

1 file changed

+73
-34
lines changed

1 file changed

+73
-34
lines changed

tests/workflow.py

Lines changed: 73 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
"""
2+
How to run locally:
3+
Start your local registry:
4+
`INDEX_ENDPOINT=https://indexstaging-docker.dotcloud.com \
5+
SETTINGS_FLAVOR=test DOCKER_REGISTRY_CONFIG=config_sample.yml docker-registry`
6+
7+
Start the tests:
8+
`DOCKER_REGISTRY_ENDPOINT=http://localhost:5000 SETTINGS_FLAVOR=test \
9+
DOCKER_REGISTRY_CONFIG=config_sample.yml DOCKER_CREDS=USER:PASS \
10+
nosetests --tests=tests/workflow.py`
11+
"""
12+
113
import hashlib
214
import os
315

@@ -19,7 +31,7 @@
1931

2032
cfg = config.load()
2133

22-
ua = 'docker/1.0.0 registry test pretending to be docker'
34+
ua = 'docker/0.11 registry test pretending to be docker'
2335

2436

2537
class TestWorkflow(base.TestCase):
@@ -28,13 +40,10 @@ class TestWorkflow(base.TestCase):
2840
registry_endpoint = os.environ.get(
2941
'DOCKER_REGISTRY_ENDPOINT',
3042
'https://registrystaging-docker.dotcloud.com')
31-
#registry_endpoint = 'http://localhost:5000'
3243
index_endpoint = os.environ.get(
3344
'DOCKER_INDEX_ENDPOINT',
3445
'https://indexstaging-docker.dotcloud.com')
35-
# export DOCKER_CREDS="login:password"
3646
user_credentials = os.environ['DOCKER_CREDS'].split(':')
37-
cookies = None
3847

3948
def generate_chunk(self, data):
4049
bufsize = 1024
@@ -46,12 +55,8 @@ def generate_chunk(self, data):
4655
yield buf
4756
io.close()
4857

49-
def update_cookies(self, response):
50-
cookies = response.cookies
51-
if cookies:
52-
self.cookies = cookies
53-
5458
def upload_image(self, image_id, parent_id, token):
59+
# XXX revert
5560
layer = self.gen_random_string(7 * 1024 * 1024)
5661
json_obj = {
5762
'id': image_id
@@ -68,26 +73,34 @@ def upload_image(self, image_id, parent_id, token):
6873
headers={'Authorization': 'Token ' + token,
6974
'User-Agent': ua,
7075
'X-Docker-Checksum': layer_checksum},
71-
cookies=self.cookies)
76+
)
77+
7278
self.assertEqual(resp.status_code, 200, resp.text)
73-
self.update_cookies(resp)
7479
resp = requests.put('{0}/v1/images/{1}/layer'.format(
7580
self.registry_endpoint, image_id),
7681
data=self.generate_chunk(layer),
7782
headers={'Authorization': 'Token ' + token,
7883
'User-Agent': ua},
79-
cookies=self.cookies)
84+
)
85+
86+
resp = requests.put('{0}/v1/images/{1}/checksum'.format(
87+
self.registry_endpoint, image_id),
88+
data={},
89+
headers={'Authorization': 'Token ' + token,
90+
'X-Docker-Checksum-Payload': layer_checksum,
91+
'User-Agent': ua}
92+
)
93+
8094
self.assertEqual(resp.status_code, 200, resp.text)
81-
self.update_cookies(resp)
8295
return {'id': image_id, 'checksum': layer_checksum}
8396

8497
def update_tag(self, namespace, repos, image_id, tag_name):
8598
resp = requests.put('{0}/v1/repositories/{1}/{2}/tags/{3}'.format(
8699
self.registry_endpoint, namespace, repos, tag_name),
87100
data=json.dumps(image_id),
88-
cookies=self.cookies)
101+
)
102+
89103
self.assertEqual(resp.status_code, 200, resp.text)
90-
self.update_cookies(resp)
91104

92105
def docker_push(self):
93106
# Test Push
@@ -106,11 +119,11 @@ def docker_push(self):
106119
'User-Agent': ua},
107120
data=images_json)
108121
self.assertEqual(resp.status_code, 200, resp.text)
109-
token = resp.headers.get('x-docker-token')
122+
self.token = resp.headers.get('x-docker-token')
110123
# Docker -> Registry
111124
images_json = []
112-
images_json.append(self.upload_image(parent_id, None, token))
113-
images_json.append(self.upload_image(image_id, parent_id, token))
125+
images_json.append(self.upload_image(parent_id, None, self.token))
126+
images_json.append(self.upload_image(image_id, parent_id, self.token))
114127
# Updating the tags does not need a token, it will use the Cookie
115128
self.update_tag(namespace, repos, image_id, 'latest')
116129
# Docker -> Index
@@ -127,41 +140,62 @@ def fetch_image(self, image_id):
127140
"""Return image json metadata, checksum and its blob."""
128141
resp = requests.get('{0}/v1/images/{1}/json'.format(
129142
self.registry_endpoint, image_id),
130-
cookies=self.cookies)
143+
)
131144
self.assertEqual(resp.status_code, 200, resp.text)
132-
self.update_cookies(resp)
145+
146+
resp = requests.get('{0}/v1/images/{1}/json'.format(
147+
self.registry_endpoint, image_id),
148+
headers={'Authorization': 'Token ' + self.token}
149+
)
150+
self.assertEqual(resp.status_code, 200, resp.text)
151+
133152
json_data = resp.text
134-
checksum = resp.headers['x-docker-checksum']
153+
checksum = resp.headers['x-docker-payload-checksum']
154+
135155
resp = requests.get('{0}/v1/images/{1}/layer'.format(
136156
self.registry_endpoint, image_id),
137-
cookies=self.cookies)
157+
)
158+
self.assertEqual(resp.status_code, 200, resp.text)
159+
160+
resp = requests.get('{0}/v1/images/{1}/layer'.format(
161+
self.registry_endpoint, image_id),
162+
headers={'Authorization': 'Token ' + self.token}
163+
)
138164
self.assertEqual(resp.status_code, 200, resp.text)
139-
self.update_cookies(resp)
140165
return (json_data, checksum, resp.text)
141166

142167
def docker_pull(self, namespace, repos):
143168
# Test pull
144169
# Docker -> Index
170+
171+
resp = requests.get('{0}/v1/repositories/{1}/{2}/images'.format(
172+
self.index_endpoint, namespace, repos),)
173+
self.assertEqual(resp.status_code, 200)
174+
145175
resp = requests.get('{0}/v1/repositories/{1}/{2}/images'.format(
146176
self.index_endpoint, namespace, repos),
147177
auth=tuple(self.user_credentials),
148178
headers={'X-Docker-Token': 'true'})
149179
self.assertEqual(resp.status_code, 200)
150-
token = resp.headers.get('x-docker-token')
180+
self.token = resp.headers.get('x-docker-token')
151181
# Here we should use the 'X-Endpoints' returned in a real environment
152182
# Docker -> Registry
153183
resp = requests.get('{0}/v1/repositories/{1}/{2}/tags/latest'.format(
154184
self.registry_endpoint, namespace, repos),
155-
headers={'Authorization': 'Token ' + token})
185+
headers={'Authorization': 'Token ' + self.token})
156186
self.assertEqual(resp.status_code, 200, resp.text)
157-
self.cookies = resp.cookies
187+
188+
resp = requests.get('{0}/v1/repositories/{1}/{2}/tags/latest'.format(
189+
self.registry_endpoint, namespace, repos),
190+
)
191+
self.assertEqual(resp.status_code, 200, resp.text)
192+
158193
# Docker -> Registry
159194
# Note(dmp): unicode patch XXX not applied assume requests does the job
160195
image_id = json.loads(resp.text)
161196
resp = requests.get('{0}/v1/images/{1}/ancestry'.format(
162197
self.registry_endpoint, image_id),
163-
cookies=self.cookies)
164-
self.update_cookies(resp)
198+
)
165199
self.assertEqual(resp.status_code, 200, resp.text)
166200
# Note(dmp): unicode patch XXX not applied assume requests does the job
167201
ancestry = json.loads(resp.text)
@@ -177,14 +211,19 @@ def docker_pull(self, namespace, repos):
177211
tmpfile.close()
178212
self.assertEqual(checksum, computed_checksum)
179213
# Remove the repository
180-
resp = requests.delete('{0}/v1/repositories/{1}/{2}/'.format(
181-
self.registry_endpoint, namespace, repos), cookies=self.cookies)
182-
self.assertEqual(resp.status_code, 200, resp.text)
183-
self.update_cookies(resp)
214+
resp = requests.delete('{0}/v1/repositories/{1}/{2}/images'.format(
215+
self.registry_endpoint, namespace, repos), )
216+
self.assertEqual(resp.status_code, 204, resp.text)
184217
# Remove image_id, then parent_id
185218
store = storage.load()
186-
store.remove(os.path.join(store.images, self.image_id))
187-
store.remove(os.path.join(store.images, self.parent_id))
219+
try:
220+
store.remove(os.path.join(store.images, self.image_id))
221+
except Exception:
222+
pass
223+
try:
224+
store.remove(os.path.join(store.images, self.parent_id))
225+
except Exception:
226+
pass
188227

189228
def test_workflow(self):
190229
(namespace, repos) = self.docker_push()

0 commit comments

Comments
 (0)