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

Commit abc8490

Browse files
committed
first unit tests for tarfiles
Docker-DCO-1.1-Signed-off-by: Vincent Batts <[email protected]> (github: vbatts)
1 parent 1ceba48 commit abc8490

File tree

8 files changed

+94
-0
lines changed

8 files changed

+94
-0
lines changed

tests/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
import random
77
import string
88
import unittest
9+
import os
910

1011
from docker_registry.core import compat
1112

13+
data_dir = os.path.join(os.path.dirname(__file__), "data")
1214

1315
class TestCase(unittest.TestCase):
1416

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"id":"46af0962ab5afeb5ce6740d4d91652e69206fc991fd5328c1a94d364ad00e457","parent":"def3f9165934325dfd027c86530b2ea49bb57a0963eb1336b3a0415ff6fd56de","created":"2014-04-07T02:45:52.610504484Z","container":"e0f07f8d72cae171a3dcc35859960e7e956e0628bce6fedc4122bf55b2c287c7","container_config":{"Hostname":"88807319f25e","Domainname":"","User":"","Memory":0,"MemorySwap":0,"CpuShares":0,"AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"PortSpecs":null,"ExposedPorts":null,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["HOME=/","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","sed -ri 's/^(%wheel.*)(ALL)$/\\1NOPASSWD: \\2/' /etc/sudoers"],"Image":"def3f9165934325dfd027c86530b2ea49bb57a0963eb1336b3a0415ff6fd56de","Volumes":null,"WorkingDir":"","Entrypoint":null,"NetworkDisabled":false,"OnBuild":[]},"docker_version":"0.9.1-dev","config":{"Hostname":"88807319f25e","Domainname":"","User":"","Memory":0,"MemorySwap":0,"CpuShares":0,"AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"PortSpecs":null,"ExposedPorts":null,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["HOME=/","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":null,"Image":"def3f9165934325dfd027c86530b2ea49bb57a0963eb1336b3a0415ff6fd56de","Volumes":null,"WorkingDir":"","Entrypoint":null,"NetworkDisabled":false,"OnBuild":[]},"architecture":"amd64","os":"linux","Size":3425}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"id":"511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158","comment":"Imported from -","created":"2013-06-13T14:03:50.821769-07:00","container_config":{"Hostname":"","Domainname":"","User":"","Memory":0,"MemorySwap":0,"CpuShares":0,"AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"PortSpecs":null,"ExposedPorts":null,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":null,"Image":"","Volumes":null,"WorkingDir":"","Entrypoint":null,"NetworkDisabled":false,"OnBuild":null},"docker_version":"0.4.0","architecture":"x86_64","Size":0}

tests/data/xattr/json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"id":"4439c3c7f847954100b42b267e7e5529cac1d6934db082f65795c5ca2e594d93","parent":"73b164f4437db87e96e90083c73a6592f549646ae2ec00ed33c6b9b49a5c4470","created":"2014-05-16T17:19:44.091534414Z","container":"5f92fb06cc58f357f0cde41394e2bbbb664e663974b2ac1693ab07b7a306749b","container_config":{"Hostname":"9565c6517a0e","Domainname":"","User":"","Memory":0,"MemorySwap":0,"CpuShares":0,"Cpuset":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"PortSpecs":null,"ExposedPorts":null,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["HOME=/","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","setcap 'cap_setgid,cap_setuid+ep' ./file \u0026\u0026 getcap ./file"],"Image":"73b164f4437db87e96e90083c73a6592f549646ae2ec00ed33c6b9b49a5c4470","Volumes":null,"WorkingDir":"","Entrypoint":null,"NetworkDisabled":false,"OnBuild":[]},"docker_version":"0.11.1-dev","config":{"Hostname":"9565c6517a0e","Domainname":"","User":"","Memory":0,"MemorySwap":0,"CpuShares":0,"Cpuset":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"PortSpecs":null,"ExposedPorts":null,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["HOME=/","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":null,"Image":"73b164f4437db87e96e90083c73a6592f549646ae2ec00ed33c6b9b49a5c4470","Volumes":null,"WorkingDir":"","Entrypoint":null,"NetworkDisabled":false,"OnBuild":[]},"architecture":"amd64","os":"linux","Size":0}

tests/data/xattr/layer.tar

2.5 KB
Binary file not shown.

tests/test_tarfile.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import os, sys
4+
5+
import base
6+
from docker_registry.lib import checksums
7+
from docker_registry.lib import xtarfile
8+
9+
tarfile = xtarfile.tarfile
10+
11+
class TestTarfile(base.TestCase):
12+
13+
def setUp(self):
14+
self.header_fields = ('name', 'mode', 'uid', 'gid', 'size', 'mtime',
15+
'type', 'linkname', 'uname', 'gname', 'devmajor',
16+
'devminor')
17+
#self.store = storage.load(kind='file')
18+
#self.filenames = list(comp(5, rndstr))
19+
pass
20+
21+
def test_headers(self):
22+
expected = {
23+
"46af0962ab5afeb5ce6740d4d91652e69206fc991fd5328c1a94d364ad00e457/layer.tar": {
24+
"dev": {
25+
"headers": { "size": 0, "mode": 040755, "type": "5", },
26+
"pax": { },
27+
},
28+
"dev/core": {
29+
"headers": { "size": 0, "mode": 0120777, "type": "2", },
30+
"pax": { },
31+
},
32+
"dev/stderr": {
33+
"headers": { "size": 0, "mode": 0120777, "type": "2", },
34+
"pax": { },
35+
},
36+
"dev/stdout": {
37+
"headers": { "size": 0, "mode": 0120777, "type": "2", },
38+
"pax": { },
39+
},
40+
"dev/fd": {
41+
"headers": { "size": 0, "mode": 0120777, "type": "2", },
42+
"pax": { },
43+
},
44+
"dev/ptmx": {
45+
"headers": { "size": 0, "mode": 0120777, "type": "2", },
46+
"pax": { },
47+
},
48+
"dev/stdin": {
49+
"headers": { "size": 0, "mode": 0120777, "type": "2", },
50+
"pax": { },
51+
},
52+
"etc": {
53+
"headers": { "size": 0, "mode": 040755, "type": "5", },
54+
"pax": { },
55+
},
56+
"etc/sudoers": {
57+
"headers": { "size": 3348, "mode": 0100440, "type": "0", },
58+
"pax": { },
59+
},
60+
},
61+
"511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158/layer.tar": {
62+
".": {
63+
"headers": { "size": 0, "mode": 040755, "type": "5", },
64+
"pax": { },
65+
},
66+
},
67+
"xattr/layer.tar": {
68+
"file": {
69+
"headers": { "size": 0, "mode": 0100644, "type": "0", },
70+
"pax": { u"SCHILY.xattr.security.capability": "\x01\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" },
71+
},
72+
},
73+
}
74+
for file in expected.keys():
75+
layer_fh = open(os.path.join(base.data_dir, file))
76+
tar = tarfile.open(mode='r|*', fileobj=layer_fh)
77+
member_count = 0
78+
for member in tar:
79+
member_count += 1
80+
# check that we know the file names
81+
assert (len(filter(lambda x: member.path in x, expected[file].keys())) > 0), "in %s, did not find file %s" % (file, member.path)
82+
e = expected[file][member.path]
83+
for attr in e["headers"].keys():
84+
assert e["headers"][attr] == getattr(member, attr), "in %s:%s, expected %s of %s, but got %s" % (file, member.path, attr, e["headers"][attr], getattr(member, attr))
85+
for attr in e["pax"].keys():
86+
assert e["pax"][attr] == member.pax_headers[attr], "in %s:%s, expected %s of %s, but got %s" % (file, member.path, attr, e["pax"][attr], member.pax_headers[attr])
87+
88+
assert member_count == len(expected[file])
89+

0 commit comments

Comments
 (0)