0
Fork 0
mirror of https://github.com/project-zot/zot.git synced 2024-12-16 21:56:37 -05:00
zot/pkg/cli/root_test.go

159 lines
4.9 KiB
Go
Raw Normal View History

2019-06-20 18:36:40 -05:00
package cli_test
import (
2019-09-17 17:45:28 -05:00
"io/ioutil"
2019-06-20 18:36:40 -05:00
"os"
"path"
2019-06-20 18:36:40 -05:00
"testing"
"github.com/anuvu/zot/pkg/api"
2019-06-20 18:36:40 -05:00
"github.com/anuvu/zot/pkg/cli"
. "github.com/smartystreets/goconvey/convey"
"github.com/spf13/viper"
2019-06-20 18:36:40 -05:00
)
func TestUsage(t *testing.T) {
oldArgs := os.Args
2019-06-20 18:36:40 -05:00
defer func() { os.Args = oldArgs }()
2019-09-17 17:45:28 -05:00
Convey("Test usage", t, func(c C) {
2019-06-20 18:36:40 -05:00
os.Args = []string{"cli_test", "help"}
err := cli.NewRootCmd().Execute()
2019-06-20 18:36:40 -05:00
So(err, ShouldBeNil)
})
2019-09-17 17:45:28 -05:00
Convey("Test version", t, func(c C) {
os.Args = []string{"cli_test", "--version"}
err := cli.NewRootCmd().Execute()
2019-09-17 17:45:28 -05:00
So(err, ShouldBeNil)
})
2019-06-20 18:36:40 -05:00
}
func TestServe(t *testing.T) {
oldArgs := os.Args
2019-06-20 18:36:40 -05:00
defer func() { os.Args = oldArgs }()
2019-09-17 17:45:28 -05:00
Convey("Test serve help", t, func(c C) {
2019-06-20 18:36:40 -05:00
os.Args = []string{"cli_test", "serve", "-h"}
err := cli.NewRootCmd().Execute()
2019-06-20 18:36:40 -05:00
So(err, ShouldBeNil)
})
2019-09-17 17:45:28 -05:00
Convey("Test serve config", t, func(c C) {
Convey("unknown config", func(c C) {
os.Args = []string{"cli_test", "serve", path.Join(os.TempDir(), "/x")}
So(func() { _ = cli.NewRootCmd().Execute() }, ShouldPanic)
2019-09-17 17:45:28 -05:00
})
Convey("non-existent config", func(c C) {
os.Args = []string{"cli_test", "serve", path.Join(os.TempDir(), "/x.yaml")}
So(func() { _ = cli.NewRootCmd().Execute() }, ShouldPanic)
2019-09-17 17:45:28 -05:00
})
Convey("bad config", func(c C) {
tmpfile, err := ioutil.TempFile("", "zot-test*.json")
So(err, ShouldBeNil)
defer os.Remove(tmpfile.Name()) // clean up
content := []byte(`{"log":{}}`)
_, err = tmpfile.Write(content)
So(err, ShouldBeNil)
err = tmpfile.Close()
So(err, ShouldBeNil)
os.Args = []string{"cli_test", "serve", tmpfile.Name()}
So(func() { _ = cli.NewRootCmd().Execute() }, ShouldPanic)
2019-09-17 17:45:28 -05:00
})
})
2019-06-20 18:36:40 -05:00
}
func TestVerify(t *testing.T) {
oldArgs := os.Args
defer func() { os.Args = oldArgs }()
Convey("Test verify bad config", t, func(c C) {
tmpfile, err := ioutil.TempFile("", "zot-test*.json")
So(err, ShouldBeNil)
defer os.Remove(tmpfile.Name()) // clean up
content := []byte(`{"log":{}}`)
_, err = tmpfile.Write(content)
So(err, ShouldBeNil)
err = tmpfile.Close()
So(err, ShouldBeNil)
os.Args = []string{"cli_test", "verify", tmpfile.Name()}
So(func() { _ = cli.NewRootCmd().Execute() }, ShouldPanic)
})
Convey("Test verify w/ authorization and w/o authentication", t, func(c C) {
tmpfile, err := ioutil.TempFile("", "zot-test*.json")
So(err, ShouldBeNil)
defer os.Remove(tmpfile.Name()) // clean up
content := []byte(`{"storage":{"rootDirectory":"/tmp/zot"},
"http":{"address":"127.0.0.1","port":"8080","realm":"zot",
"accessControl":{"adminPolicy":{"users":["admin"],
"actions":["read","create","update","delete"]}}}}`)
_, err = tmpfile.Write(content)
So(err, ShouldBeNil)
err = tmpfile.Close()
So(err, ShouldBeNil)
os.Args = []string{"cli_test", "verify", tmpfile.Name()}
So(func() { _ = cli.NewRootCmd().Execute() }, ShouldPanic)
})
Convey("Test verify w/ authorization and w/ authentication", t, func(c C) {
tmpfile, err := ioutil.TempFile("", "zot-test*.json")
So(err, ShouldBeNil)
defer os.Remove(tmpfile.Name()) // clean up
content := []byte(`{"storage":{"rootDirectory":"/tmp/zot"},
"http":{"address":"127.0.0.1","port":"8080","realm":"zot",
"auth":{"htpasswd":{"path":"test/data/htpasswd"},"failDelay":1},
"accessControl":{"adminPolicy":{"users":["admin"],
"actions":["read","create","update","delete"]}}}}`)
_, err = tmpfile.Write(content)
So(err, ShouldBeNil)
err = tmpfile.Close()
So(err, ShouldBeNil)
os.Args = []string{"cli_test", "verify", tmpfile.Name()}
So(func() { _ = cli.NewRootCmd().Execute() }, ShouldNotPanic)
})
Convey("Test verify good config", t, func(c C) {
tmpfile, err := ioutil.TempFile("", "zot-test*.json")
So(err, ShouldBeNil)
defer os.Remove(tmpfile.Name()) // clean up
content := []byte(`{"version": "0.1.0-dev", "storage": {"rootDirectory": "/tmp/zot"},
"http": {"address": "127.0.0.1", "port": "8080", "ReadOnly": false},
"log": {"level": "debug"}}`)
_, err = tmpfile.Write(content)
So(err, ShouldBeNil)
err = tmpfile.Close()
So(err, ShouldBeNil)
os.Args = []string{"cli_test", "verify", tmpfile.Name()}
err = cli.NewRootCmd().Execute()
So(err, ShouldBeNil)
})
}
func TestLoadConfig(t *testing.T) {
Convey("Test viper load config", t, func(c C) {
config := api.NewConfig()
So(func() { cli.LoadConfiguration(config, "../../examples/config-policy.json") }, ShouldNotPanic)
adminPolicy := viper.GetStringMapStringSlice("http.accessControl.adminPolicy")
So(config.AccessControl.AdminPolicy.Actions, ShouldResemble, adminPolicy["actions"])
So(config.AccessControl.AdminPolicy.Users, ShouldResemble, adminPolicy["users"])
})
}
2019-06-20 18:36:40 -05:00
func TestGC(t *testing.T) {
oldArgs := os.Args
2019-06-20 18:36:40 -05:00
defer func() { os.Args = oldArgs }()
2019-09-17 17:45:28 -05:00
Convey("Test gc", t, func(c C) {
2019-06-20 18:36:40 -05:00
os.Args = []string{"cli_test", "garbage-collect", "-h"}
err := cli.NewRootCmd().Execute()
2019-06-20 18:36:40 -05:00
So(err, ShouldBeNil)
})
}