Browse code

Add unit test for RebaseArchiveEntries

Signed-off-by: yangshukui <yangshukui@huawei.com>

yangshukui authored on 2017/08/07 17:40:54
Showing 1 changed files
... ...
@@ -126,6 +126,59 @@ func TestTarWithHardLink(t *testing.T) {
126 126
 	}
127 127
 }
128 128
 
129
+func TestTarWithHardLinkAndRebase(t *testing.T) {
130
+	tmpDir, err := ioutil.TempDir("", "docker-test-tar-hardlink-rebase")
131
+	if err != nil {
132
+		t.Fatal(err)
133
+	}
134
+	defer os.RemoveAll(tmpDir)
135
+
136
+	origin := filepath.Join(tmpDir, "origin")
137
+	if err := os.Mkdir(origin, 0700); err != nil {
138
+		t.Fatal(err)
139
+	}
140
+	if err := ioutil.WriteFile(filepath.Join(origin, "1"), []byte("hello world"), 0700); err != nil {
141
+		t.Fatal(err)
142
+	}
143
+	if err := os.Link(filepath.Join(origin, "1"), filepath.Join(origin, "2")); err != nil {
144
+		t.Fatal(err)
145
+	}
146
+
147
+	var i1, i2 uint64
148
+	if i1, err = getNlink(filepath.Join(origin, "1")); err != nil {
149
+		t.Fatal(err)
150
+	}
151
+	// sanity check that we can hardlink
152
+	if i1 != 2 {
153
+		t.Skipf("skipping since hardlinks don't work here; expected 2 links, got %d", i1)
154
+	}
155
+
156
+	dest := filepath.Join(tmpDir, "dest")
157
+
158
+	bRdr, err := TarResourceRebase(origin, "origin")
159
+	if err != nil {
160
+		t.Fatal(err)
161
+	}
162
+	dstDir, srcBase := SplitPathDirEntry(origin)
163
+	_, dstBase := SplitPathDirEntry(dest)
164
+	content := RebaseArchiveEntries(bRdr, srcBase, dstBase)
165
+	err = Untar(content, dstDir, &TarOptions{Compression: Uncompressed, NoLchown: true, NoOverwriteDirNonDir: true})
166
+	if err != nil {
167
+		t.Fatal(err)
168
+	}
169
+
170
+	if i1, err = getInode(filepath.Join(dest, "1")); err != nil {
171
+		t.Fatal(err)
172
+	}
173
+	if i2, err = getInode(filepath.Join(dest, "2")); err != nil {
174
+		t.Fatal(err)
175
+	}
176
+
177
+	if i1 != i2 {
178
+		t.Errorf("expected matching inodes, but got %d and %d", i1, i2)
179
+	}
180
+}
181
+
129 182
 func getNlink(path string) (uint64, error) {
130 183
 	stat, err := os.Stat(path)
131 184
 	if err != nil {