convox/pkg/cli/racks_test.go
David Dollar bba828e3e9
add local rack (#60)
* add local rack

* add instructions for trusting local ca

* handle local rack idling

* must install ca to system keychain

* update tests

* change router service type on linux local

* trim platform name when passing to rack

* restart microk8s after installation
2019-12-31 11:01:52 -05:00

129 lines
3.4 KiB
Go

package cli_test
import (
"fmt"
"io/ioutil"
"net/http"
"net/http/httptest"
"net/url"
"os"
"path/filepath"
"testing"
"github.com/convox/convox/pkg/cli"
mocksdk "github.com/convox/convox/pkg/mock/sdk"
mockstdcli "github.com/convox/convox/pkg/mock/stdcli"
"github.com/gorilla/mux"
"github.com/stretchr/testify/require"
)
func TestRacks(t *testing.T) {
testClient(t, func(e *cli.Engine, i *mocksdk.Interface) {
r := mux.NewRouter()
r.HandleFunc("/racks", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`[
{"name":"foo","organization":{"name":"test"},"status":"running"},
{"name":"other","organization":{"name":"test"},"status":"updating"}
]`))
}).Methods("GET")
ts := httptest.NewTLSServer(r)
tsu, err := url.Parse(ts.URL)
require.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(e.Settings, "host"), []byte(tsu.Host), 0644)
require.NoError(t, err)
me := &mockstdcli.Executor{}
me.On("Execute", "kubectl", "get", "ns", "--selector=system=convox,type=rack", "--output=name").Return([]byte("namespace/dev\n"), nil)
me.On("Execute", "kubectl", "get", "namespace/dev", "-o", "jsonpath={.metadata.labels.rack}").Return([]byte("dev\n"), nil)
e.Executor = me
res, err := testExecute(e, "racks", nil)
require.NoError(t, err)
require.Equal(t, 0, res.Code)
res.RequireStderr(t, []string{""})
res.RequireStdout(t, []string{
"NAME STATUS ",
"local/dev running ",
"test/foo running ",
"test/other updating",
})
me.AssertExpectations(t)
})
}
func TestRacksLocalDisable(t *testing.T) {
orig := os.Getenv("CONVOX_LOCAL")
os.Setenv("CONVOX_LOCAL", "disable")
defer os.Setenv("CONVOX_LOCAL", orig)
testClient(t, func(e *cli.Engine, i *mocksdk.Interface) {
r := mux.NewRouter()
r.HandleFunc("/racks", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`[
{"name":"foo","organization":{"name":"test"},"status":"running"},
{"name":"other","organization":{"name":"test"},"status":"updating"}
]`))
}).Methods("GET")
ts := httptest.NewTLSServer(r)
tsu, err := url.Parse(ts.URL)
require.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(e.Settings, "host"), []byte(tsu.Host), 0644)
require.NoError(t, err)
me := &mockstdcli.Executor{}
e.Executor = me
res, err := testExecute(e, "racks", nil)
require.NoError(t, err)
require.Equal(t, 0, res.Code)
res.RequireStderr(t, []string{""})
res.RequireStdout(t, []string{
"NAME STATUS ",
"test/foo running ",
"test/other updating",
})
me.AssertExpectations(t)
})
}
func TestRacksError(t *testing.T) {
testClient(t, func(e *cli.Engine, i *mocksdk.Interface) {
r := mux.NewRouter()
r.HandleFunc("/racks", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(500)
w.Write([]byte("test"))
}).Methods("GET")
ts := httptest.NewTLSServer(r)
tsu, err := url.Parse(ts.URL)
require.NoError(t, err)
err = ioutil.WriteFile(filepath.Join(e.Settings, "host"), []byte(tsu.Host), 0644)
require.NoError(t, err)
me := &mockstdcli.Executor{}
me.On("Execute", "kubectl", "get", "ns", "--selector=system=convox,type=rack", "--output=name").Return(nil, fmt.Errorf("err1"))
e.Executor = me
res, err := testExecute(e, "racks", nil)
require.NoError(t, err)
require.Equal(t, 0, res.Code)
res.RequireStderr(t, []string{""})
res.RequireStdout(t, []string{
"NAME STATUS",
})
})
}