Merge pull request #25 from monstermunchkin/testing
generators: Fix Restore and add tests
This commit is contained in:
commit
c3d2bc0315
@ -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)
|
||||
|
121
generators/generators_test.go
Normal file
121
generators/generators_test.go
Normal 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())
|
||||
}
|
||||
}
|
82
generators/hostname_test.go
Normal file
82
generators/hostname_test.go
Normal 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
90
generators/hosts_test.go
Normal 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")
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user