forked from go-debos/debos
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for Tar, Zip and Deb archive types. go test -coverprofile=cover.out .... PASS coverage: 51.0% of statements Coverage for archiver.go: 100% Signed-off-by: Denis Pynkin <[email protected]> tests reworked
- Loading branch information
Showing
1 changed file
with
157 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
package debos_test | ||
|
||
import ( | ||
_ "fmt" | ||
"github.com/go-debos/debos" | ||
"github.com/stretchr/testify/assert" | ||
_ "reflect" | ||
_ "strings" | ||
"testing" | ||
) | ||
|
||
func TestBase(t *testing.T) { | ||
|
||
// New archive | ||
// Expect Tar by default | ||
_, err := debos.NewArchive("test.base", 0) | ||
assert.EqualError(t, err, "Unsupported archive 'test.base'") | ||
|
||
// Test base | ||
archive := debos.ArchiveBase{} | ||
arcType := archive.Type() | ||
assert.Equal(t, 0, int(arcType)) | ||
|
||
// Add option | ||
err = archive.AddOption("someoption", "somevalue") | ||
assert.Empty(t, err) | ||
|
||
err = archive.Unpack("/tmp/test") | ||
assert.EqualError(t, err, "Unpack is not supported for ''") | ||
err = archive.RelaxedUnpack("/tmp/test") | ||
assert.EqualError(t, err, "Unpack is not supported for ''") | ||
} | ||
|
||
func TestTar_default(t *testing.T) { | ||
|
||
// New archive | ||
// Expect Tar by default | ||
archive, err := debos.NewArchive("test.tar.gz") | ||
assert.NotEmpty(t, archive) | ||
assert.Empty(t, err) | ||
|
||
// Type must be Tar by default | ||
arcType := archive.Type() | ||
assert.Equal(t, debos.Tar, arcType) | ||
|
||
// Test unpack | ||
err = archive.Unpack("/tmp/test") | ||
// Expect unpack failure | ||
assert.EqualError(t, err, "exit status 2") | ||
|
||
// Expect failure for RelaxedUnpack | ||
err = archive.RelaxedUnpack("/tmp/test") | ||
assert.EqualError(t, err, "exit status 2") | ||
|
||
// Check options | ||
err = archive.AddOption("taroptions", []string{"--option1"}) | ||
assert.Empty(t, err) | ||
err = archive.Unpack("/tmp/test") | ||
assert.EqualError(t, err, "exit status 64") | ||
err = archive.Unpack("/proc/debostest") | ||
assert.EqualError(t, err, "mkdir /proc/debostest: no such file or directory") | ||
err = archive.RelaxedUnpack("/tmp/test") | ||
assert.EqualError(t, err, "exit status 64") | ||
|
||
// Add wrong option | ||
err = archive.AddOption("someoption", "somevalue") | ||
assert.EqualError(t, err, "Option 'someoption' is not supported for tar archive type") | ||
} | ||
|
||
// Check supported compression types | ||
func TestTar_compression(t *testing.T) { | ||
compressions := map[string]string{ | ||
"gz": "tar -C test -x -z -f test.tar.gz", | ||
"bzip2": "tar -C test -x -j -f test.tar.gz", | ||
"xz": "tar -C test -x -J -f test.tar.gz", | ||
} | ||
|
||
// Force type | ||
archive, err := debos.NewArchive("test.tar.gz", debos.Tar) | ||
assert.NotEmpty(t, archive) | ||
assert.Empty(t, err) | ||
// Type must be Tar | ||
arcType := archive.Type() | ||
assert.Equal(t, debos.Tar, arcType) | ||
|
||
for compression, _ := range compressions { | ||
err = archive.AddOption("tarcompression", compression) | ||
assert.Empty(t, err) | ||
err := archive.Unpack("test") | ||
assert.EqualError(t, err, "exit status 2") | ||
} | ||
// Check of unsupported compression type | ||
err = archive.AddOption("tarcompression", "fake") | ||
assert.EqualError(t, err, "Compression 'fake' is not supported") | ||
|
||
// Pass incorrect type | ||
err = archive.AddOption("taroptions", nil) | ||
assert.EqualError(t, err, "Wrong type for value") | ||
err = archive.AddOption("tarcompression", nil) | ||
assert.EqualError(t, err, "Wrong type for value") | ||
} | ||
|
||
func TestDeb(t *testing.T) { | ||
|
||
// Guess Deb | ||
archive, err := debos.NewArchive("test.deb") | ||
assert.NotEmpty(t, archive) | ||
assert.Empty(t, err) | ||
|
||
// Type must be guessed as Deb | ||
arcType := archive.Type() | ||
assert.Equal(t, debos.Deb, arcType) | ||
|
||
// Force Deb type | ||
archive, err = debos.NewArchive("test.deb", debos.Deb) | ||
assert.NotEmpty(t, archive) | ||
assert.Empty(t, err) | ||
|
||
// Type must be Deb | ||
arcType = archive.Type() | ||
assert.Equal(t, debos.Deb, arcType) | ||
|
||
// Expect unpack failure | ||
err = archive.Unpack("/tmp/test") | ||
assert.EqualError(t, err, "exit status 2") | ||
err = archive.Unpack("/proc/debostest") | ||
assert.EqualError(t, err, "mkdir /proc/debostest: no such file or directory") | ||
err = archive.RelaxedUnpack("/tmp/test") | ||
assert.EqualError(t, err, "exit status 2") | ||
} | ||
|
||
func TestZip(t *testing.T) { | ||
// Guess zip | ||
archive, err := debos.NewArchive("test.ZiP") | ||
assert.NotEmpty(t, archive) | ||
assert.Empty(t, err) | ||
// Type must be guessed as Zip | ||
arcType := archive.Type() | ||
assert.Equal(t, debos.Zip, arcType) | ||
|
||
// Force Zip type | ||
archive, err = debos.NewArchive("test.zip", debos.Zip) | ||
assert.NotEmpty(t, archive) | ||
assert.Empty(t, err) | ||
|
||
// Type must be Zip | ||
arcType = archive.Type() | ||
assert.Equal(t, debos.Zip, arcType) | ||
|
||
// Expect unpack failure | ||
err = archive.Unpack("/tmp/test") | ||
assert.EqualError(t, err, "exit status 9") | ||
err = archive.Unpack("/proc/debostest") | ||
assert.EqualError(t, err, "mkdir /proc/debostest: no such file or directory") | ||
err = archive.RelaxedUnpack("/tmp/test") | ||
assert.EqualError(t, err, "exit status 9") | ||
} |