/
main_test.go
213 lines (179 loc) · 8.33 KB
/
main_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
package main
import (
"fmt"
"os"
"strings"
"testing"
"github.com/googlecloudplatform/gcsfuse/v2/internal/config"
"github.com/googlecloudplatform/gcsfuse/v2/internal/util"
mountpkg "github.com/googlecloudplatform/gcsfuse/v2/internal/mount"
. "github.com/jacobsa/ogletest"
)
func Test_Main(t *testing.T) { RunTests(t) }
////////////////////////////////////////////////////////////////////////
// Boilerplate
////////////////////////////////////////////////////////////////////////
type MainTest struct {
}
func init() { RegisterTestSuite(&MainTest{}) }
func (t *MainTest) TestCreateStorageHandle() {
flags := &flagStorage{
ClientProtocol: mountpkg.HTTP1,
MaxConnsPerHost: 5,
MaxIdleConnsPerHost: 100,
HttpClientTimeout: 5,
MaxRetrySleep: 7,
RetryMultiplier: 2,
AppName: "app",
KeyFile: "testdata/test_creds.json",
}
mountConfig := &config.MountConfig{}
userAgent := "AppName"
storageHandle, err := createStorageHandle(flags, mountConfig, userAgent)
AssertEq(nil, err)
AssertNe(nil, storageHandle)
}
func (t *MainTest) TestCreateStorageHandle_WithClientProtocolAsGRPC() {
flags := &flagStorage{
ClientProtocol: mountpkg.GRPC,
MaxConnsPerHost: 5,
MaxIdleConnsPerHost: 100,
HttpClientTimeout: 5,
MaxRetrySleep: 7,
RetryMultiplier: 2,
AppName: "app",
KeyFile: "testdata/test_creds.json",
}
mountConfig := &config.MountConfig{
GrpcClientConfig: config.GrpcClientConfig{ConnPoolSize: 1},
}
userAgent := "AppName"
storageHandle, err := createStorageHandle(flags, mountConfig, userAgent)
AssertEq(nil, err)
AssertNe(nil, storageHandle)
}
func (t *MainTest) TestGetUserAgentWhenMetadataImageTypeEnvVarIsSet() {
os.Setenv("GCSFUSE_METADATA_IMAGE_TYPE", "DLVM")
defer os.Unsetenv("GCSFUSE_METADATA_IMAGE_TYPE")
mountConfig := &config.MountConfig{}
userAgent := getUserAgent("AppName", getConfigForUserAgent(mountConfig))
expectedUserAgent := strings.TrimSpace(fmt.Sprintf("gcsfuse/%s AppName (GPN:gcsfuse-DLVM) (Cfg:0:0)", getVersion()))
ExpectEq(expectedUserAgent, userAgent)
}
func (t *MainTest) TestGetUserAgentWhenMetadataImageTypeEnvVarIsNotSet() {
mountConfig := &config.MountConfig{}
userAgent := getUserAgent("AppName", getConfigForUserAgent(mountConfig))
expectedUserAgent := strings.TrimSpace(fmt.Sprintf("gcsfuse/%s (GPN:gcsfuse-AppName) (Cfg:0:0)", getVersion()))
ExpectEq(expectedUserAgent, userAgent)
}
func (t *MainTest) TestGetUserAgentConfigWithNoFileCache() {
mountConfig := &config.MountConfig{}
userAgent := getUserAgent("AppName", getConfigForUserAgent(mountConfig))
expectedUserAgent := strings.TrimSpace(fmt.Sprintf("gcsfuse/%s (GPN:gcsfuse-AppName) (Cfg:0:0)", getVersion()))
ExpectEq(expectedUserAgent, userAgent)
}
func (t *MainTest) TestGetUserAgentConfigWithFileCacheEnabledRandomReadEnabled() {
mountConfig := &config.MountConfig{
CacheDir: "//tmp//folder//",
FileCacheConfig: config.FileCacheConfig{
MaxSizeMB: -1,
CacheFileForRangeRead: true,
},
}
userAgent := getUserAgent("AppName", getConfigForUserAgent(mountConfig))
expectedUserAgent := strings.TrimSpace(fmt.Sprintf("gcsfuse/%s (GPN:gcsfuse-AppName) (Cfg:1:1)", getVersion()))
ExpectEq(expectedUserAgent, userAgent)
}
func (t *MainTest) TestGetUserAgentConfigWithFileCacheEnabledRandomDisabled() {
// Test File Cache Enabled but Random Read Disabled
mountConfig := &config.MountConfig{
CacheDir: "//tmp//folder//",
FileCacheConfig: config.FileCacheConfig{
MaxSizeMB: -1,
},
}
userAgent := getUserAgent("AppName", getConfigForUserAgent(mountConfig))
expectedUserAgent := strings.TrimSpace(fmt.Sprintf("gcsfuse/%s (GPN:gcsfuse-AppName) (Cfg:1:0)", getVersion()))
ExpectEq(expectedUserAgent, userAgent)
}
func (t *MainTest) TestGetUserAgentConfigWithFileCacheSizeSetCacheDirNotSet() {
// Test File cache disabled where MaxSize is set but Cache Dir is not set.
mountConfig := &config.MountConfig{
FileCacheConfig: config.FileCacheConfig{
MaxSizeMB: -1,
},
}
userAgent := getUserAgent("AppName", getConfigForUserAgent(mountConfig))
expectedUserAgent := strings.TrimSpace(fmt.Sprintf("gcsfuse/%s (GPN:gcsfuse-AppName) (Cfg:0:0)", getVersion()))
ExpectEq(expectedUserAgent, userAgent)
}
func (t *MainTest) TestGetUserAgentConfigWithCacheDirSetMaxSizeDisabled() {
// Test File Cache disabled when Cache Dir is given but maxSize is set 0.
mountConfig := &config.MountConfig{
CacheDir: "//tmp//folder//",
FileCacheConfig: config.FileCacheConfig{
MaxSizeMB: 0,
},
}
userAgent := getUserAgent("AppName", getConfigForUserAgent(mountConfig))
expectedUserAgent := strings.TrimSpace(fmt.Sprintf("gcsfuse/%s (GPN:gcsfuse-AppName) (Cfg:0:0)", getVersion()))
ExpectEq(expectedUserAgent, userAgent)
}
func (t *MainTest) TestGetUserAgentWhenMetadataImageTypeEnvVarSetAndAppNameNotSet() {
os.Setenv("GCSFUSE_METADATA_IMAGE_TYPE", "DLVM")
defer os.Unsetenv("GCSFUSE_METADATA_IMAGE_TYPE")
mountConfig := &config.MountConfig{}
userAgent := getUserAgent("", getConfigForUserAgent(mountConfig))
expectedUserAgent := strings.TrimSpace(fmt.Sprintf("gcsfuse/%s (GPN:gcsfuse-DLVM) (Cfg:0:0)", getVersion()))
ExpectEq(expectedUserAgent, userAgent)
}
func (t *MainTest) TestStringifyShouldReturnAllFlagsPassedInMountConfigAsMarshalledString() {
mountConfig := &config.MountConfig{
WriteConfig: config.WriteConfig{
CreateEmptyFile: false,
},
LogConfig: config.LogConfig{
Severity: config.TRACE,
FilePath: "\"path\"to\"file\"",
LogRotateConfig: config.LogRotateConfig{
MaxFileSizeMB: 2,
BackupFileCount: 2,
Compress: true,
},
},
ListConfig: config.ListConfig{
EnableEmptyManagedFolders: false,
},
EnableHNS: true,
}
actual, err := util.Stringify(mountConfig)
AssertEq(nil, err)
expected := "{\"CreateEmptyFile\":false,\"Severity\":\"TRACE\",\"Format\":\"\",\"FilePath\":\"\\\"path\\\"to\\\"file\\\"\",\"LogRotateConfig\":{\"MaxFileSizeMB\":2,\"BackupFileCount\":2,\"Compress\":true},\"MaxSizeMB\":0,\"CacheFileForRangeRead\":false,\"CacheDir\":\"\",\"TtlInSeconds\":0,\"TypeCacheMaxSizeMB\":0,\"StatCacheMaxSizeMB\":0,\"EnableEmptyManagedFolders\":false,\"ConnPoolSize\":0,\"AnonymousAccess\":false,\"EnableHNS\":true,\"IgnoreInterrupts\":false}"
AssertEq(expected, actual)
}
func (t *MainTest) TestEnableHNSFlagFalse() {
mountConfig := &config.MountConfig{
EnableHNS: false,
}
actual, err := util.Stringify(mountConfig)
AssertEq(nil, err)
expected := "{\"CreateEmptyFile\":false,\"Severity\":\"\",\"Format\":\"\",\"FilePath\":\"\",\"LogRotateConfig\":{\"MaxFileSizeMB\":0,\"BackupFileCount\":0,\"Compress\":false},\"MaxSizeMB\":0,\"CacheFileForRangeRead\":false,\"CacheDir\":\"\",\"TtlInSeconds\":0,\"TypeCacheMaxSizeMB\":0,\"StatCacheMaxSizeMB\":0,\"EnableEmptyManagedFolders\":false,\"ConnPoolSize\":0,\"AnonymousAccess\":false,\"EnableHNS\":false,\"IgnoreInterrupts\":false}"
AssertEq(expected, actual)
}
func (t *MainTest) TestStringifyShouldReturnAllFlagsPassedInFlagStorageAsMarshalledString() {
mountOptions := map[string]string{
"1": "one",
"2": "two",
"3": "three",
}
flags := &flagStorage{
SequentialReadSizeMb: 10,
ClientProtocol: mountpkg.ClientProtocol("http4"),
MountOptions: mountOptions,
}
actual, err := util.Stringify(flags)
AssertEq(nil, err)
expected := "{\"AppName\":\"\",\"Foreground\":false,\"ConfigFile\":\"\",\"MountOptions\":{\"1\":\"one\",\"2\":\"two\",\"3\":\"three\"},\"DirMode\":0,\"FileMode\":0,\"Uid\":0,\"Gid\":0,\"ImplicitDirs\":false,\"OnlyDir\":\"\",\"RenameDirLimit\":0,\"IgnoreInterrupts\":false,\"CustomEndpoint\":null,\"BillingProject\":\"\",\"KeyFile\":\"\",\"TokenUrl\":\"\",\"ReuseTokenFromUrl\":false,\"EgressBandwidthLimitBytesPerSecond\":0,\"OpRateLimitHz\":0,\"SequentialReadSizeMb\":10,\"AnonymousAccess\":false,\"MaxRetrySleep\":0,\"StatCacheCapacity\":0,\"StatCacheTTL\":0,\"TypeCacheTTL\":0,\"HttpClientTimeout\":0,\"MaxRetryDuration\":0,\"RetryMultiplier\":0,\"LocalFileCache\":false,\"TempDir\":\"\",\"ClientProtocol\":\"http4\",\"MaxConnsPerHost\":0,\"MaxIdleConnsPerHost\":0,\"EnableNonexistentTypeCache\":false,\"StackdriverExportInterval\":0,\"OtelCollectorAddress\":\"\",\"LogFile\":\"\",\"LogFormat\":\"\",\"ExperimentalEnableJsonRead\":false,\"DebugFuseErrors\":false,\"DebugFuse\":false,\"DebugFS\":false,\"DebugGCS\":false,\"DebugHTTP\":false,\"DebugInvariants\":false,\"DebugMutex\":false}"
AssertEq(expected, actual)
AssertEq(expected, actual)
}