Skip to content

Commit 455beb7

Browse files
committed
feat: unit tests for factory added.
- factory refactored to write tests easly.
1 parent 6bf6da7 commit 455beb7

4 files changed

Lines changed: 998 additions & 81 deletions

File tree

storage/factory.go

Lines changed: 84 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -19,97 +19,100 @@ import (
1919
s3config "github.com/cloudfoundry/storage-cli/s3/config"
2020
)
2121

22-
func NewStorageClient(storageType string, configFile *os.File) (Storager, error) {
23-
var client Storager
22+
var newAzurebsClient = func(configFile *os.File) (Storager, error) {
23+
conf, err := azureconfigbs.NewFromReader(configFile)
24+
if err != nil {
25+
return nil, err
26+
}
2427

25-
switch storageType {
26-
case "azurebs":
27-
{
28+
sc, err := azurebs.NewStorageClient(conf)
29+
if err != nil {
30+
return nil, err
31+
}
2832

29-
conf, err := azureconfigbs.NewFromReader(configFile)
30-
if err != nil {
31-
return nil, err
32-
}
33+
azClient, err := azurebs.New(sc)
34+
if err != nil {
35+
return nil, err
36+
}
37+
return &azClient, nil
38+
}
3339

34-
sc, err := azurebs.NewStorageClient(conf)
35-
if err != nil {
36-
return nil, err
37-
}
40+
var newAliossClient = func(configFile *os.File) (Storager, error) {
41+
aliConfig, err := aliossconfig.NewFromReader(configFile)
42+
if err != nil {
43+
return nil, err
44+
}
3845

39-
azClient, err := azurebs.New(sc)
40-
if err != nil {
41-
return nil, err
42-
}
43-
client = &azClient
46+
storageClient, err := alioss.NewStorageClient(aliConfig)
47+
if err != nil {
48+
return nil, err
49+
}
4450

45-
}
46-
case "alioss":
47-
{
48-
aliConfig, err := aliossconfig.NewFromReader(configFile)
49-
if err != nil {
50-
return nil, err
51-
}
52-
53-
storageClient, err := alioss.NewStorageClient(aliConfig)
54-
if err != nil {
55-
return nil, err
56-
}
57-
58-
aliClient, err := alioss.New(storageClient)
59-
if err != nil {
60-
return nil, err
61-
}
62-
63-
client = &aliClient
64-
}
65-
case "s3":
66-
{
67-
s3Config, err := s3config.NewFromReader(configFile)
68-
if err != nil {
69-
return nil, err
70-
}
71-
72-
s3Client, err := s3.NewAwsS3Client(&s3Config)
73-
if err != nil {
74-
return nil, err
75-
}
76-
77-
client = s3.New(s3Client, &s3Config)
78-
}
79-
case "gcs":
80-
{
81-
gcsConfig, err := gcsconfig.NewFromReader(configFile)
82-
if err != nil {
83-
return nil, err
84-
}
85-
86-
ctx := context.Background()
87-
gcsClient, err := gcs.New(ctx, &gcsConfig)
88-
if err != nil {
89-
return nil, err
90-
}
91-
client = gcsClient
92-
}
93-
case "dav":
94-
{
95-
davConfig, err := davconfig.NewFromReader(configFile)
96-
if err != nil {
97-
return nil, err
98-
}
51+
aliClient, err := alioss.New(storageClient)
52+
if err != nil {
53+
return nil, err
54+
}
55+
56+
return &aliClient, nil
57+
}
9958

100-
logger := boshlog.NewLogger(boshlog.LevelNone)
101-
cmdFactory := davcmd.NewFactory(logger)
59+
var newGcsClient = func(configFile *os.File) (Storager, error) {
60+
gcsConfig, err := gcsconfig.NewFromReader(configFile)
61+
if err != nil {
62+
return nil, err
63+
}
10264

103-
cmdRunner := davcmd.NewRunner(cmdFactory)
65+
ctx := context.Background()
66+
gcsClient, err := gcs.New(ctx, &gcsConfig)
67+
if err != nil {
68+
return nil, err
69+
}
70+
return gcsClient, nil
10471

105-
app := davapp.New(cmdRunner, davConfig)
106-
client = app
107-
}
72+
}
10873

109-
default:
110-
return nil, fmt.Errorf("storage %s not implemented", storageType)
74+
var newS3Client = func(configFile *os.File) (Storager, error) {
75+
s3Config, err := s3config.NewFromReader(configFile)
76+
if err != nil {
77+
return nil, err
11178
}
11279

113-
return client, nil
80+
s3Client, err := s3.NewAwsS3Client(&s3Config)
81+
if err != nil {
82+
return nil, err
83+
}
84+
85+
return s3.New(s3Client, &s3Config), nil
86+
87+
}
88+
89+
var newDavClient = func(configFile *os.File) (Storager, error) {
90+
davConfig, err := davconfig.NewFromReader(configFile)
91+
if err != nil {
92+
return nil, err
93+
}
94+
95+
logger := boshlog.NewLogger(boshlog.LevelNone)
96+
cmdFactory := davcmd.NewFactory(logger)
97+
98+
cmdRunner := davcmd.NewRunner(cmdFactory)
99+
100+
return davapp.New(cmdRunner, davConfig), nil
101+
}
114102

103+
func NewStorageClient(storageType string, configFile *os.File) (Storager, error) {
104+
switch storageType {
105+
case "azurebs":
106+
return newAzurebsClient(configFile)
107+
case "alioss":
108+
return newAliossClient(configFile)
109+
case "s3":
110+
return newS3Client(configFile)
111+
case "gcs":
112+
return newGcsClient(configFile)
113+
case "dav":
114+
return newDavClient(configFile)
115+
default:
116+
return nil, fmt.Errorf("storage %s not implemented", storageType)
117+
}
115118
}

storage/factory_test.go

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package storage
2+
3+
import (
4+
"os"
5+
6+
. "github.com/onsi/ginkgo/v2"
7+
. "github.com/onsi/gomega"
8+
)
9+
10+
var _ = Describe("Factory", func() {
11+
Describe("New", func() {
12+
13+
var configFile *os.File
14+
BeforeEach(func() {
15+
configFile, _ = os.CreateTemp("", "some-config-file") //linting:noerrcheck
16+
17+
})
18+
AfterEach(func() {
19+
configFile.Close()
20+
os.Remove("some-config-file")
21+
})
22+
23+
Context("alioss", func() {
24+
It("Create a client", func() {
25+
original := newAliossClient
26+
DeferCleanup(func() {
27+
newAliossClient = original
28+
})
29+
30+
mockClient := &FakeStorager{}
31+
newAliossClient = func(configFile *os.File) (Storager, error) {
32+
return mockClient, nil
33+
}
34+
35+
client, err := NewStorageClient("alioss", configFile)
36+
Expect(client).ToNot(BeNil())
37+
Expect(err).ToNot(HaveOccurred())
38+
Expect(client).To(Equal(mockClient))
39+
})
40+
41+
})
42+
43+
Context("azurebs", func() {
44+
It("Create a client", func() {
45+
original := newAzurebsClient
46+
DeferCleanup(func() {
47+
newAzurebsClient = original
48+
})
49+
50+
mockClient := &FakeStorager{}
51+
newAzurebsClient = func(configFile *os.File) (Storager, error) {
52+
return mockClient, nil
53+
}
54+
55+
client, err := NewStorageClient("azurebs", configFile)
56+
Expect(client).ToNot(BeNil())
57+
Expect(err).ToNot(HaveOccurred())
58+
Expect(client).To(Equal(mockClient))
59+
})
60+
61+
})
62+
63+
Context("dav", func() {
64+
It("Create a client", func() {
65+
original := newDavClient
66+
DeferCleanup(func() {
67+
newDavClient = original
68+
})
69+
70+
mockClient := &FakeStorager{}
71+
newDavClient = func(configFile *os.File) (Storager, error) {
72+
return mockClient, nil
73+
}
74+
75+
client, err := NewStorageClient("dav", configFile)
76+
Expect(client).ToNot(BeNil())
77+
Expect(err).ToNot(HaveOccurred())
78+
Expect(client).To(Equal(mockClient))
79+
})
80+
81+
})
82+
83+
Context("gcs", func() {
84+
It("Create a client", func() {
85+
original := newGcsClient
86+
DeferCleanup(func() {
87+
newGcsClient = original
88+
})
89+
90+
mockClient := &FakeStorager{}
91+
newGcsClient = func(configFile *os.File) (Storager, error) {
92+
return mockClient, nil
93+
}
94+
95+
client, err := NewStorageClient("gcs", configFile)
96+
Expect(client).ToNot(BeNil())
97+
Expect(err).ToNot(HaveOccurred())
98+
Expect(client).To(Equal(mockClient))
99+
})
100+
101+
})
102+
103+
Context("s3", func() {
104+
It("Create a client", func() {
105+
original := newS3Client
106+
DeferCleanup(func() {
107+
newS3Client = original
108+
})
109+
110+
mockClient := &FakeStorager{}
111+
newS3Client = func(configFile *os.File) (Storager, error) {
112+
return mockClient, nil
113+
}
114+
115+
client, err := NewStorageClient("s3", configFile)
116+
Expect(client).ToNot(BeNil())
117+
Expect(err).ToNot(HaveOccurred())
118+
Expect(client).To(Equal(mockClient))
119+
})
120+
121+
})
122+
123+
It("Unimplemented Client", func() {
124+
client, err := NewStorageClient("random-client", configFile)
125+
Expect(err).To(HaveOccurred())
126+
Expect(client).To(BeNil())
127+
})
128+
})
129+
})

0 commit comments

Comments
 (0)