Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using Stretcher testify package in storage handle tests #1867

Merged
merged 15 commits into from
May 3, 2024
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ require (
github.com/jacobsa/syncutil v0.0.0-20180201203307-228ac8e5a6c3
github.com/jacobsa/timeutil v0.0.0-20170205232429-577e5acbbcf6
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
github.com/stretchr/testify v1.8.4
github.com/urfave/cli v1.22.14
go.opencensus.io v0.24.0
golang.org/x/net v0.22.0
Expand Down Expand Up @@ -46,6 +47,7 @@ require (
github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe // indirect
github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/envoyproxy/go-control-plane v0.12.0 // indirect
github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
Expand All @@ -61,6 +63,7 @@ require (
github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/pkg/xattr v0.4.9 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/prometheus v0.35.0 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
Expand Down
144 changes: 74 additions & 70 deletions internal/storage/storage_handle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,79 +25,68 @@ import (
"github.com/googlecloudplatform/gcsfuse/v2/internal/storage/storageutil"
"github.com/jacobsa/oglematchers"
. "github.com/jacobsa/ogletest"
Tulsishah marked this conversation as resolved.
Show resolved Hide resolved
"github.com/stretchr/testify/suite"
)

const invalidBucketName string = "will-not-be-present-in-fake-server"
const projectID string = "valid-project-id"

func TestStorageHandle(t *testing.T) { RunTests(t) }

type StorageHandleTest struct {
suite.Suite
fakeStorage FakeStorage
}

var _ SetUpInterface = &StorageHandleTest{}
var _ TearDownInterface = &StorageHandleTest{}

func init() { RegisterTestSuite(&StorageHandleTest{}) }
func TestStorageHandleSuite(t *testing.T) {
suite.Run(t, new(StorageHandleTest))
}

func (t *StorageHandleTest) SetUp(_ *TestInfo) {
func (suite *StorageHandleTest) SetupSuite() {
Tulsishah marked this conversation as resolved.
Show resolved Hide resolved
var err error
t.fakeStorage = NewFakeStorage()
suite.fakeStorage = NewFakeStorage()
Tulsishah marked this conversation as resolved.
Show resolved Hide resolved
AssertEq(nil, err)
}

func (t *StorageHandleTest) TearDown() {
t.fakeStorage.ShutDown()
func (suite *StorageHandleTest) TearDownSuite() {
suite.fakeStorage.ShutDown()
}

func (t *StorageHandleTest) invokeAndVerifyStorageHandle(sc storageutil.StorageClientConfig) {
Tulsishah marked this conversation as resolved.
Show resolved Hide resolved
handleCreated, err := NewStorageHandle(context.Background(), sc)

AssertEq(nil, err)
AssertNe(nil, handleCreated)
}

func (t *StorageHandleTest) TestBucketHandleWhenBucketExistsWithEmptyBillingProject() {
storageHandle := t.fakeStorage.CreateStorageHandle()
func (suite *StorageHandleTest) TestBucketHandleWhenBucketExistsWithEmptyBillingProject() {
storageHandle := suite.fakeStorage.CreateStorageHandle()
bucketHandle := storageHandle.BucketHandle(TestBucketName, "")

AssertNe(nil, bucketHandle)
AssertEq(TestBucketName, bucketHandle.bucketName)
}

func (t *StorageHandleTest) TestBucketHandleWhenBucketDoesNotExistWithEmptyBillingProject() {
storageHandle := t.fakeStorage.CreateStorageHandle()
func (suite *StorageHandleTest) TestBucketHandleWhenBucketDoesNotExistWithEmptyBillingProject() {
storageHandle := suite.fakeStorage.CreateStorageHandle()
bucketHandle := storageHandle.BucketHandle(invalidBucketName, "")

AssertEq(nil, bucketHandle.Bucket)
}

func (t *StorageHandleTest) TestBucketHandleWhenBucketExistsWithNonEmptyBillingProject() {
storageHandle := t.fakeStorage.CreateStorageHandle()
func (suite *StorageHandleTest) TestBucketHandleWhenBucketExistsWithNonEmptyBillingProject() {
storageHandle := suite.fakeStorage.CreateStorageHandle()
bucketHandle := storageHandle.BucketHandle(TestBucketName, projectID)

AssertNe(nil, bucketHandle)
AssertEq(TestBucketName, bucketHandle.bucketName)
}

func (t *StorageHandleTest) TestBucketHandleWhenBucketDoesNotExistWithNonEmptyBillingProject() {
storageHandle := t.fakeStorage.CreateStorageHandle()
func (suite *StorageHandleTest) TestBucketHandleWhenBucketDoesNotExistWithNonEmptyBillingProject() {
storageHandle := suite.fakeStorage.CreateStorageHandle()
bucketHandle := storageHandle.BucketHandle(invalidBucketName, projectID)

AssertEq(nil, bucketHandle.Bucket)
}

func (t *StorageHandleTest) TestNewStorageHandleHttp2Disabled() {
func (suite *StorageHandleTest) TestNewStorageHandleHttp2Disabled() {
sc := storageutil.GetDefaultStorageClientConfig() // by default http1 enabled

t.invokeAndVerifyStorageHandle(sc)
}

func (t *StorageHandleTest) TestNewStorageHandleHttp2Enabled() {
sc := storageutil.GetDefaultStorageClientConfig() // by default http1 enabled
handleCreated, err := NewStorageHandle(context.Background(), sc)

t.invokeAndVerifyStorageHandle(sc)
AssertEq(nil, err)
AssertNe(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleHttp2EnabledAndAuthEnabled() {
Expand All @@ -108,34 +97,31 @@ func (t *StorageHandleTest) TestNewStorageHandleHttp2EnabledAndAuthEnabled() {
handleCreated, err := NewStorageHandle(context.Background(), sc)

AssertNe(nil, err)
ExpectThat(err, oglematchers.Error(oglematchers.HasSubstr("no such file or directory")))
AssertTrue(strings.Contains(err.Error(), "no such file or directory"))
AssertEq(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleWithZeroMaxConnsPerHost() {
func (suite *StorageHandleTest) TestNewStorageHandleWithZeroMaxConnsPerHost() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.MaxConnsPerHost = 0

t.invokeAndVerifyStorageHandle(sc)
handleCreated, err := NewStorageHandle(context.Background(), sc)

AssertEq(nil, err)
AssertNe(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleWhenUserAgentIsSet() {
func (suite *StorageHandleTest) TestNewStorageHandleWhenUserAgentIsSet() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.UserAgent = "gcsfuse/unknown (Go version go1.20-pre3 cl/474093167 +a813be86df) appName (GPN:Gcsfuse-DLC)"

t.invokeAndVerifyStorageHandle(sc)
}
handleCreated, err := NewStorageHandle(context.Background(), sc)

func (t *StorageHandleTest) TestNewStorageHandleWithCustomEndpoint() {
url, err := url.Parse(storageutil.CustomEndpoint)
AssertEq(nil, err)
sc := storageutil.GetDefaultStorageClientConfig()
sc.CustomEndpoint = url

t.invokeAndVerifyStorageHandle(sc)
AssertNe(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleWithCustomEndpointAndAuthEnabled() {
func (suite *StorageHandleTest) TestNewStorageHandleWithCustomEndpointAndAuthEnabled() {
url, err := url.Parse(storageutil.CustomEndpoint)
AssertEq(nil, err)
sc := storageutil.GetDefaultStorageClientConfig()
Expand All @@ -150,7 +136,7 @@ func (t *StorageHandleTest) TestNewStorageHandleWithCustomEndpointAndAuthEnabled
}

// This will fail while fetching the token-source, since key-file doesn't exist.
func (t *StorageHandleTest) TestNewStorageHandleWhenCustomEndpointIsNilAndAuthEnabled() {
func (suite *StorageHandleTest) TestNewStorageHandleWhenCustomEndpointIsNilAndAuthEnabled() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.CustomEndpoint = nil
sc.AnonymousAccess = false
Expand All @@ -162,35 +148,47 @@ func (t *StorageHandleTest) TestNewStorageHandleWhenCustomEndpointIsNilAndAuthEn
AssertEq(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleWhenKeyFileIsEmpty() {
func (suite *StorageHandleTest) TestNewStorageHandleWhenKeyFileIsEmpty() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.KeyFile = ""

t.invokeAndVerifyStorageHandle(sc)
handleCreated, err := NewStorageHandle(context.Background(), sc)

AssertEq(nil, err)
AssertNe(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleWhenReuseTokenUrlFalse() {
func (suite *StorageHandleTest) TestNewStorageHandleWhenReuseTokenUrlFalse() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.ReuseTokenFromUrl = false

t.invokeAndVerifyStorageHandle(sc)
handleCreated, err := NewStorageHandle(context.Background(), sc)

AssertEq(nil, err)
AssertNe(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleWhenTokenUrlIsSet() {
func (suite *StorageHandleTest) TestNewStorageHandleWhenTokenUrlIsSet() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.TokenUrl = storageutil.CustomTokenUrl

t.invokeAndVerifyStorageHandle(sc)
handleCreated, err := NewStorageHandle(context.Background(), sc)

AssertEq(nil, err)
AssertNe(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleWhenJsonReadEnabled() {
func (suite *StorageHandleTest) TestNewStorageHandleWhenJsonReadEnabled() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.ExperimentalEnableJsonRead = true

t.invokeAndVerifyStorageHandle(sc)
handleCreated, err := NewStorageHandle(context.Background(), sc)

AssertEq(nil, err)
AssertNe(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleWithInvalidClientProtocol() {
func (suite *StorageHandleTest) TestNewStorageHandleWithInvalidClientProtocol() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.ExperimentalEnableJsonRead = true
sc.ClientProtocol = "test-protocol"
Expand All @@ -202,52 +200,58 @@ func (t *StorageHandleTest) TestNewStorageHandleWithInvalidClientProtocol() {
AssertTrue(strings.Contains(err.Error(), "invalid client-protocol requested: test-protocol"))
}

func (t *StorageHandleTest) TestCreateGRPCClientHandle() {
func (suite *StorageHandleTest) TestCreateGRPCClientHandle() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.ClientProtocol = mountpkg.GRPC

handleCreated, err := createGRPCClientHandle(context.Background(), &sc)
storageClient, err := createGRPCClientHandle(context.Background(), &sc)

AssertEq(nil, err)
AssertNe(nil, handleCreated)
AssertNe(nil, storageClient)
}

func (t *StorageHandleTest) TestCreateHTTPClientHandle() {
func (suite *StorageHandleTest) TestCreateHTTPClientHandle() {
sc := storageutil.GetDefaultStorageClientConfig()

t.invokeAndVerifyStorageHandle(sc)
storageClient, err := createHTTPClientHandle(context.Background(), &sc)

AssertEq(nil, err)
AssertNe(nil, storageClient)
}

func (t *StorageHandleTest) TestNewStorageHandleWithGRPCClientProtocol() {
func (suite *StorageHandleTest) TestNewStorageHandleWithGRPCClientProtocol() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.ClientProtocol = mountpkg.GRPC

t.invokeAndVerifyStorageHandle(sc)
storageClient, err := NewStorageHandle(context.Background(), sc)

AssertEq(nil, err)
AssertNe(nil, storageClient)
}

func (t *StorageHandleTest) TestCreateGRPCClientHandle_WithHTTPClientProtocol() {
func (suite *StorageHandleTest) TestCreateGRPCClientHandle_WithHTTPClientProtocol() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.ClientProtocol = mountpkg.HTTP1

handleCreated, err := createGRPCClientHandle(context.Background(), &sc)
storageClient, err := createGRPCClientHandle(context.Background(), &sc)

AssertNe(nil, err)
AssertEq(nil, handleCreated)
AssertEq(nil, storageClient)
AssertTrue(strings.Contains(err.Error(), fmt.Sprintf("client-protocol requested is not GRPC: %s", mountpkg.HTTP1)))
}

func (t *StorageHandleTest) TestCreateHTTPClientHandle_WithGRPCClientProtocol() {
func (suite *StorageHandleTest) TestCreateHTTPClientHandle_WithGRPCClientProtocol() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.ClientProtocol = mountpkg.GRPC

handleCreated, err := createHTTPClientHandle(context.Background(), &sc)
storageClient, err := createHTTPClientHandle(context.Background(), &sc)

AssertNe(nil, err)
AssertEq(nil, handleCreated)
AssertEq(nil, storageClient)
AssertTrue(strings.Contains(err.Error(), fmt.Sprintf("client-protocol requested is not HTTP1 or HTTP2: %s", mountpkg.GRPC)))
}

func (t *StorageHandleTest) TestNewStorageHandleWithGRPCClientWithCustomEndpointNilAndAuthEnabled() {
func (suite *StorageHandleTest) TestNewStorageHandleWithGRPCClientWithCustomEndpointNilAndAuthEnabled() {
sc := storageutil.GetDefaultStorageClientConfig()
sc.CustomEndpoint = nil
sc.AnonymousAccess = false
Expand All @@ -260,7 +264,7 @@ func (t *StorageHandleTest) TestNewStorageHandleWithGRPCClientWithCustomEndpoint
AssertEq(nil, handleCreated)
}

func (t *StorageHandleTest) TestNewStorageHandleWithGRPCClientWithCustomEndpointAndAuthEnabled() {
func (suite *StorageHandleTest) TestNewStorageHandleWithGRPCClientWithCustomEndpointAndAuthEnabled() {
url, err := url.Parse(storageutil.CustomEndpoint)
AssertEq(nil, err)
sc := storageutil.GetDefaultStorageClientConfig()
Expand Down