From 27c36f6160c60a3c38aa3244dff93aa24904a233 Mon Sep 17 00:00:00 2001 From: Matthias Loibl Date: Wed, 24 Apr 2019 18:20:16 +0200 Subject: [PATCH] pkg: Write tests for TestInsertDependency, TestFileExists, TestLoadJsonnetfile --- go.mod | 2 +- pkg/packages.go | 16 +++---- pkg/packages_test.go | 108 ++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 114 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index b6ca0ff..39ee8f4 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/mattn/go-colorable v0.0.9 // indirect github.com/mattn/go-isatty v0.0.6 // indirect github.com/pkg/errors v0.8.0 - github.com/stretchr/testify v1.3.0 // indirect + github.com/stretchr/testify v1.3.0 golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa // indirect gopkg.in/alecthomas/kingpin.v2 v2.2.6 ) diff --git a/pkg/packages.go b/pkg/packages.go index e7dcf26..a847298 100644 --- a/pkg/packages.go +++ b/pkg/packages.go @@ -34,11 +34,12 @@ var ( VersionMismatch = errors.New("multiple colliding versions specified") ) -func Install(ctx context.Context, isLock bool, dependencySourceIdentifier string, m spec.JsonnetFile, dir string) (lock *spec.JsonnetFile, err error) { - lock = &spec.JsonnetFile{} +func Install(ctx context.Context, isLock bool, dependencySourceIdentifier string, m spec.JsonnetFile, dir string) (*spec.JsonnetFile, error) { + lockfile := &spec.JsonnetFile{} for _, dep := range m.Dependencies { + tmp := filepath.Join(dir, ".tmp") - err = os.MkdirAll(tmp, os.ModePerm) + err := os.MkdirAll(tmp, os.ModePerm) if err != nil { return nil, errors.Wrap(err, "failed to create general tmp dir") } @@ -63,9 +64,6 @@ func Install(ctx context.Context, isLock bool, dependencySourceIdentifier string color.Green(">>> Installed %s version %s\n", dep.Name, dep.Version) destPath := path.Join(dir, dep.Name) - if err != nil { - return nil, errors.Wrap(err, "failed to find destination path for package") - } err = os.MkdirAll(path.Dir(destPath), os.ModePerm) if err != nil { @@ -81,7 +79,7 @@ func Install(ctx context.Context, isLock bool, dependencySourceIdentifier string return nil, errors.Wrap(err, "failed to move package") } - lock.Dependencies, err = insertDependency(lock.Dependencies, spec.Dependency{ + lockfile.Dependencies, err = insertDependency(lockfile.Dependencies, spec.Dependency{ Name: dep.Name, Source: dep.Source, Version: lockVersion, @@ -115,14 +113,14 @@ func Install(ctx context.Context, isLock bool, dependencySourceIdentifier string } for _, d := range depsInstalledByDependency.Dependencies { - lock.Dependencies, err = insertDependency(lock.Dependencies, d) + lockfile.Dependencies, err = insertDependency(lockfile.Dependencies, d) if err != nil { return nil, errors.Wrap(err, "failed to insert dependency to lock dependencies") } } } - return lock, nil + return lockfile, nil } func insertDependency(deps []spec.Dependency, newDep spec.Dependency) ([]spec.Dependency, error) { diff --git a/pkg/packages_test.go b/pkg/packages_test.go index 37688e9..729ab73 100644 --- a/pkg/packages_test.go +++ b/pkg/packages_test.go @@ -15,13 +15,19 @@ package pkg import ( + "io/ioutil" + "os" + "path/filepath" "testing" "github.com/jsonnet-bundler/jsonnet-bundler/spec" + "github.com/stretchr/testify/assert" ) -func TestInsert(t *testing.T) { - deps := []spec.Dependency{spec.Dependency{Name: "test1", Version: "latest"}} +const NotExist = "/this/does/not/exist" + +func TestInsertDependency(t *testing.T) { + deps := []spec.Dependency{{Name: "test1", Version: "latest"}} dep := spec.Dependency{Name: "test2", Version: "latest"} res, err := insertDependency(deps, dep) @@ -33,3 +39,101 @@ func TestInsert(t *testing.T) { t.Fatal("Incorrectly inserted") } } + +func TestFileExists(t *testing.T) { + { + exists, err := FileExists(NotExist) + assert.False(t, exists) + assert.Nil(t, err) + } + { + tempFile, err := ioutil.TempFile("", "jb-exists") + if err != nil { + t.Fatal(err) + } + + defer func() { + err := os.Remove(tempFile.Name()) + assert.Nil(t, err) + }() + + exists, err := FileExists(tempFile.Name()) + assert.True(t, exists) + assert.Nil(t, err) + } +} + +func TestLoadJsonnetfile(t *testing.T) { + empty := spec.JsonnetFile{} + + jsonnetfileContent := `{ + "dependencies": [ + { + "name": "foobar", + "source": { + "git": { + "remote": "https://github.com/foobar/foobar", + "subdir": "" + } + }, + "version": "master" + } + ] +} +` + jsonnetFileExpected := spec.JsonnetFile{ + Dependencies: []spec.Dependency{{ + Name: "foobar", + Source: spec.Source{ + GitSource: &spec.GitSource{ + Remote: "https://github.com/foobar/foobar", + Subdir: "", + }, + }, + Version: "master", + DepSource: "", + }}, + } + + { + jf, err := LoadJsonnetfile(NotExist) + assert.Equal(t, empty, jf) + assert.Error(t, err) + } + { + tempDir, err := ioutil.TempDir("", "jb-load-jsonnetfile") + if err != nil { + t.Fatal(err) + } + defer func() { + err := os.RemoveAll(tempDir) + assert.Nil(t, err) + }() + + tempFile := filepath.Join(tempDir, JsonnetFile) + err = ioutil.WriteFile(tempFile, []byte(`{}`), os.ModePerm) + assert.Nil(t, err) + + jf, err := LoadJsonnetfile(tempFile) + assert.Nil(t, err) + assert.Equal(t, empty, jf) + } + { + tempDir, err := ioutil.TempDir("", "jb-load-jsonnetfile") + if err != nil { + t.Fatal(err) + } + defer func() { + err := os.RemoveAll(tempDir) + assert.Nil(t, err) + }() + + tempFile := filepath.Join(tempDir, JsonnetFile) + err = ioutil.WriteFile(tempFile, []byte(jsonnetfileContent), os.ModePerm) + assert.Nil(t, err) + + jf, err := LoadJsonnetfile(tempFile) + assert.Nil(t, err) + assert.Equal(t, jsonnetFileExpected, jf) + } +}