Skip to content

Commit b456944

Browse files
committed
Move opening of kube-tmuxp config file responsibility in to kubetmuxp
1 parent a4c2353 commit b456944

File tree

5 files changed

+71
-26
lines changed

5 files changed

+71
-26
lines changed

cmd/generate.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package cmd
22

33
import (
4-
"bufio"
54
"fmt"
65
"os"
76

@@ -17,20 +16,15 @@ var generateCmd = &cobra.Command{
1716
Aliases: []string{"gen"},
1817
Short: "Generates tmuxp configs for various Kubernetes contexts",
1918
Run: func(cmd *cobra.Command, args []string) {
20-
reader, err := os.Open(cfgFile)
19+
fs := &filesystem.Default{}
20+
cmdr := &commander.Default{}
21+
kubeCfg, err := kubeconfig.New(fs, cmdr)
2122
if err != nil {
2223
fmt.Println(err)
2324
os.Exit(1)
2425
}
25-
bufioReader := bufio.NewReader(reader)
2626

27-
kubeCfg, err := kubeconfig.New(&filesystem.Default{}, &commander.Default{})
28-
if err != nil {
29-
fmt.Println(err)
30-
os.Exit(1)
31-
}
32-
33-
kubetmuxpCfg, err := kubetmuxp.NewConfig(bufioReader, kubeCfg)
27+
kubetmuxpCfg, err := kubetmuxp.NewConfig(cfgFile, fs, kubeCfg)
3428
if err != nil {
3529
fmt.Println(err)
3630
os.Exit(1)

pkg/filesystem/filesystem.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package filesystem
22

33
import (
4+
"bufio"
5+
"io"
46
"os"
57

68
homedir "github.com/mitchellh/go-homedir"
@@ -10,6 +12,7 @@ import (
1012
type FileSystem interface {
1113
Remove(file string) error
1214
HomeDir() (string, error)
15+
Open(file string) (io.Reader, error)
1316
}
1417

1518
// Default represents the Operating System's filesystem
@@ -33,3 +36,12 @@ func (d *Default) HomeDir() (string, error) {
3336

3437
return home, nil
3538
}
39+
40+
// Open opens a file for reading
41+
func (d *Default) Open(file string) (io.Reader, error) {
42+
reader, err := os.Open(file)
43+
if err != nil {
44+
return reader, err
45+
}
46+
return bufio.NewReader(reader), err
47+
}

pkg/internal/mock/filesystem.go

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/kubetmuxp/kubetmuxp.go

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package kubetmuxp
22

33
import (
44
"fmt"
5-
"io"
65
"io/ioutil"
76
"path"
87

8+
"github.com/arunvelsriram/kube-tmuxp/pkg/filesystem"
99
"github.com/arunvelsriram/kube-tmuxp/pkg/kubeconfig"
1010
yaml "gopkg.in/yaml.v2"
1111
)
@@ -60,11 +60,17 @@ type Projects []Project
6060

6161
// Config represents kube-tmuxp config
6262
type Config struct {
63-
Projects `yaml:"projects"`
64-
kubeCfg kubeconfig.KubeConfig
63+
Projects `yaml:"projects"`
64+
filesystem filesystem.FileSystem
65+
kubeCfg kubeconfig.KubeConfig
6566
}
6667

67-
func (c *Config) read(reader io.Reader) error {
68+
func (c *Config) load(cfgFile string) error {
69+
reader, err := c.filesystem.Open(cfgFile)
70+
if err != nil {
71+
return err
72+
}
73+
6874
data, err := ioutil.ReadAll(reader)
6975
if err != nil {
7076
return err
@@ -115,10 +121,13 @@ func (c *Config) Process() error {
115121
}
116122

117123
// NewConfig creates a new kube-tmuxp Config
118-
func NewConfig(reader io.Reader, kubeCfg kubeconfig.KubeConfig) (Config, error) {
119-
cfg := Config{kubeCfg: kubeCfg}
124+
func NewConfig(cfgFile string, fs filesystem.FileSystem, kubeCfg kubeconfig.KubeConfig) (Config, error) {
125+
cfg := Config{
126+
filesystem: fs,
127+
kubeCfg: kubeCfg,
128+
}
120129

121-
if err := cfg.read(reader); err != nil {
130+
if err := cfg.load(cfgFile); err != nil {
122131
return cfg, err
123132
}
124133

pkg/kubetmuxp/kubetmuxp_test.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package kubetmuxp_test
22

33
import (
4+
"fmt"
45
"strings"
56
"testing"
67

@@ -20,22 +21,37 @@ func getKubeCfg(ctrl *gomock.Controller) kubeconfig.KubeConfig {
2021
}
2122

2223
func TestNewConfig(t *testing.T) {
23-
t.Run("should create a new kube-tmuxp config", func(t *testing.T) {
24+
t.Run("should create a new kube-tmuxp config from file", func(t *testing.T) {
2425
ctrl := gomock.NewController(t)
2526
defer ctrl.Finish()
2627

28+
mockFS := mock.NewFileSystem(ctrl)
2729
reader := strings.NewReader("")
28-
kubeCfg := getKubeCfg(ctrl)
29-
kubetmuxpCfg, err := kubetmuxp.NewConfig(reader, kubeCfg)
30+
mockFS.EXPECT().Open("kube-tmuxp-config.yaml").Return(reader, nil)
31+
32+
kubetmuxpCfg, err := kubetmuxp.NewConfig("kube-tmuxp-config.yaml", mockFS, kubeconfig.KubeConfig{})
3033

3134
assert.Nil(t, err)
3235
assert.NotNil(t, kubetmuxpCfg)
3336
})
3437

38+
t.Run("should return error if file cannot be opened", func(t *testing.T) {
39+
ctrl := gomock.NewController(t)
40+
defer ctrl.Finish()
41+
42+
mockFS := mock.NewFileSystem(ctrl)
43+
mockFS.EXPECT().Open("kube-tmuxp-config.yaml").Return(nil, fmt.Errorf("some error"))
44+
45+
_, err := kubetmuxp.NewConfig("kube-tmuxp-config.yaml", mockFS, kubeconfig.KubeConfig{})
46+
47+
assert.EqualError(t, err, "some error")
48+
})
49+
3550
t.Run("should read the kube-tmuxp configs", func(t *testing.T) {
3651
ctrl := gomock.NewController(t)
3752
defer ctrl.Finish()
3853

54+
mockFS := mock.NewFileSystem(ctrl)
3955
content := `
4056
projects:
4157
- name: test-project
@@ -47,10 +63,8 @@ projects:
4763
envs:
4864
TEST_ENV: test-value`
4965
reader := strings.NewReader(content)
50-
kubeCfg := getKubeCfg(ctrl)
51-
kubetmuxpCfg, _ := kubetmuxp.NewConfig(reader, kubeCfg)
52-
53-
assert.NotNil(t, kubetmuxpCfg)
66+
mockFS.EXPECT().Open("kube-tmuxp-config.yaml").Return(reader, nil)
67+
kubetmuxpCfg, _ := kubetmuxp.NewConfig("kube-tmuxp-config.yaml", mockFS, kubeconfig.KubeConfig{})
5468

5569
expectedProjects := kubetmuxp.Projects{
5670
{
@@ -68,16 +82,18 @@ projects:
6882
},
6983
},
7084
}
85+
assert.NotNil(t, kubetmuxpCfg)
7186
assert.Equal(t, expectedProjects, kubetmuxpCfg.Projects)
7287
})
7388

7489
t.Run("should return error if config cannot be read", func(t *testing.T) {
7590
ctrl := gomock.NewController(t)
7691
defer ctrl.Finish()
7792

93+
mockFS := mock.NewFileSystem(ctrl)
7894
reader := strings.NewReader("invalid yaml")
79-
kubeCfg := getKubeCfg(ctrl)
80-
_, err := kubetmuxp.NewConfig(reader, kubeCfg)
95+
mockFS.EXPECT().Open("kube-tmuxp-config.yaml").Return(reader, nil)
96+
_, err := kubetmuxp.NewConfig("kube-tmuxp-config.yaml", mockFS, kubeconfig.KubeConfig{})
8197

8298
assert.NotNil(t, err)
8399
})

0 commit comments

Comments
 (0)