Merge pull request #25 from monstermunchkin/testing

generators: Fix Restore and add tests
This commit is contained in:
Stéphane Graber 2018-03-05 06:46:32 -05:00 committed by GitHub
commit c3d2bc0315
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 295 additions and 2 deletions

View File

@ -50,8 +50,8 @@ func RestoreFiles(cacheDir string) error {
return nil
}
return os.Rename(path,
filepath.Join(cacheDir, "rootfs", strings.TrimPrefix(path, cacheDir)))
return os.Rename(path, filepath.Join(cacheDir, "rootfs",
strings.TrimPrefix(path, filepath.Join(cacheDir, "tmp"))))
}
return filepath.Walk(filepath.Join(cacheDir, "tmp"), f)

View File

@ -0,0 +1,121 @@
package generators
import (
"bytes"
"io"
"os"
"path/filepath"
"reflect"
"testing"
)
func setup(t *testing.T, cacheDir string) {
// Create rootfs directory
err := os.MkdirAll(filepath.Join(cacheDir, "rootfs"), 0755)
if err != nil {
t.Fatalf("Failed to create rootfs directory: %s", err)
}
}
func teardown(cacheDir string) {
os.RemoveAll(cacheDir)
}
func TestGet(t *testing.T) {
generator := Get("hostname")
if generator == nil || reflect.DeepEqual(&generator, HostnameGenerator{}) {
t.Fatal("Expected hostname generator")
}
generator = Get("hosts")
if generator == nil || reflect.DeepEqual(&generator, HostsGenerator{}) {
t.Fatal("Expected hosts generator")
}
generator = Get("")
if generator != nil {
t.Fatalf("Expected nil, got '%v'", generator)
}
}
func TestRestoreFiles(t *testing.T) {
cacheDir := filepath.Join(os.TempDir(), "distrobuilder-test")
setup(t, cacheDir)
defer teardown(cacheDir)
// Create test directory
err := os.MkdirAll(filepath.Join(cacheDir, "rootfs", "testdir1"), 0755)
if err != nil {
t.Fatalf("Failed to create test directory: %s", err)
}
// Create original test file
createTestFile(t, filepath.Join(cacheDir, "rootfs", "testdir1", "testfile1"),
"original file")
// Chmod cache directory which should lead to StoreFile failing
err = os.Chmod(cacheDir, 0600)
if err != nil {
t.Fatalf("Failed to chmod cache directory: %s", err)
}
err = StoreFile(cacheDir, filepath.Join("/testdir1", "testfile1"))
if err == nil {
t.Fatal("Expected failure")
}
// Restore permissions
err = os.Chmod(cacheDir, 0755)
if err != nil {
t.Fatalf("Failed to chmod cache directory: %s", err)
}
err = StoreFile(cacheDir, filepath.Join("/testdir1", "testfile1"))
if err != nil {
t.Fatalf("Failed to store file: %s", err)
}
validateTestFile(t, filepath.Join(cacheDir, "tmp", "testdir1", "testfile1"),
"original file")
// Change content of original file
createTestFile(t, filepath.Join(cacheDir, "rootfs", "testdir1", "testfile1"),
"modified file")
err = RestoreFiles(cacheDir)
if err != nil {
t.Fatalf("Failed to restore file: %s", err)
}
validateTestFile(t, filepath.Join(cacheDir, "rootfs", "testdir1", "testfile1"),
"original file")
}
func createTestFile(t *testing.T, path, content string) {
file, err := os.Create(path)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
defer file.Close()
_, err = file.WriteString(content)
if err != nil {
t.Fatalf("Failed to write to testfile")
}
}
func validateTestFile(t *testing.T, path, content string) {
file, err := os.Open(path)
if err != nil {
t.Fatalf("Failed to open testfile: %s", err)
}
defer file.Close()
var buffer bytes.Buffer
io.Copy(&buffer, file)
if buffer.String() != content {
t.Fatalf("Expected file content to be '%s', got '%s'", content, buffer.String())
}
}

View File

@ -0,0 +1,82 @@
package generators
import (
"os"
"path/filepath"
"testing"
"github.com/lxc/distrobuilder/image"
"github.com/lxc/distrobuilder/shared"
)
func TestHostnameGeneratorCreateLXCData(t *testing.T) {
cacheDir := filepath.Join(os.TempDir(), "distrobuilder-test")
setup(t, cacheDir)
defer teardown(cacheDir)
generator := Get("hostname")
if generator == nil {
t.Fatal("Expected hostname generator, got nil")
}
definition := shared.DefinitionImage{
Distribution: "ubuntu",
Release: "artful",
}
image := image.NewLXCImage(cacheDir, definition, shared.DefinitionTargetLXC{})
err := os.MkdirAll(filepath.Join(cacheDir, "rootfs", "etc"), 0755)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
createTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hostname"), "hostname")
err = generator.CreateLXCData(cacheDir, "/etc/hostname", image)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
validateTestFile(t, filepath.Join(cacheDir, "tmp", "etc", "hostname"), "hostname")
validateTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hostname"), "LXC_NAME\n")
err = RestoreFiles(cacheDir)
if err != nil {
t.Fatalf("Failed to restore files: %s", err)
}
validateTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hostname"), "hostname")
}
func TestHostnameGeneratorCreateLXDData(t *testing.T) {
cacheDir := filepath.Join(os.TempDir(), "distrobuilder-test")
setup(t, cacheDir)
defer teardown(cacheDir)
generator := Get("hostname")
if generator == nil {
t.Fatal("Expected hostname generator, got nil")
}
definition := shared.DefinitionImage{
Distribution: "ubuntu",
Release: "artful",
}
image := image.NewLXDImage(cacheDir, definition)
err := os.MkdirAll(filepath.Join(cacheDir, "rootfs", "etc"), 0755)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
err = generator.CreateLXDData(cacheDir, "/etc/hostname", image)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
validateTestFile(t, filepath.Join(cacheDir, "templates", "hostname.tpl"), "{{ container.name }}\n")
}

90
generators/hosts_test.go Normal file
View File

@ -0,0 +1,90 @@
package generators
import (
"os"
"path/filepath"
"testing"
"github.com/lxc/distrobuilder/image"
"github.com/lxc/distrobuilder/shared"
)
func TestHostsGeneratorCreateLXCData(t *testing.T) {
cacheDir := filepath.Join(os.TempDir(), "distrobuilder-test")
setup(t, cacheDir)
defer teardown(cacheDir)
generator := Get("hosts")
if generator == nil {
t.Fatal("Expected hosts generator, got nil")
}
definition := shared.DefinitionImage{
Distribution: "ubuntu",
Release: "artful",
}
image := image.NewLXCImage(cacheDir, definition, shared.DefinitionTargetLXC{})
err := os.MkdirAll(filepath.Join(cacheDir, "rootfs", "etc"), 0755)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
createTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hosts"),
"127.0.0.1\tlocalhost\n")
err = generator.CreateLXCData(cacheDir, "/etc/hosts", image)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
validateTestFile(t, filepath.Join(cacheDir, "tmp", "etc", "hosts"),
"127.0.0.1\tlocalhost\n")
validateTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hosts"),
"127.0.0.1\tlocalhost\n127.0.0.1\tLXC_NAME\n")
err = RestoreFiles(cacheDir)
if err != nil {
t.Fatalf("Failed to restore files: %s", err)
}
validateTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hosts"),
"127.0.0.1\tlocalhost\n")
}
func TestHostsGeneratorCreateLXDData(t *testing.T) {
cacheDir := filepath.Join(os.TempDir(), "distrobuilder-test")
setup(t, cacheDir)
defer teardown(cacheDir)
generator := Get("hosts")
if generator == nil {
t.Fatal("Expected hosts generator, got nil")
}
definition := shared.DefinitionImage{
Distribution: "ubuntu",
Release: "artful",
}
image := image.NewLXDImage(cacheDir, definition)
err := os.MkdirAll(filepath.Join(cacheDir, "rootfs", "etc"), 0755)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
createTestFile(t, filepath.Join(cacheDir, "rootfs", "etc", "hosts"),
"127.0.0.1\tlocalhost\n")
err = generator.CreateLXDData(cacheDir, "/etc/hosts", image)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
validateTestFile(t, filepath.Join(cacheDir, "templates", "hosts.tpl"),
"127.0.0.1\tlocalhost\n127.0.0.1\t{{ container.name }}\n")
}