Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rmweir committed Dec 9, 2022
1 parent 2af98b7 commit f56b902
Show file tree
Hide file tree
Showing 6 changed files with 569 additions and 0 deletions.
56 changes: 56 additions & 0 deletions pkg/client/client_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package client

import (
"net/http"
"testing"

"github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/client-go/rest"
)

type userAgentRoundTripper struct {
expectedUserAgent string
t *testing.T
}

func TestWithAgent(t *testing.T) {
testUserAgent := "testagent"
testConfig := rest.Config{
UserAgent: "defaultuseragent",
ContentConfig: rest.ContentConfig{
NegotiatedSerializer: serializer.WithoutConversionCodecFactory{},
},
Transport: userAgentRoundTripper{t: t, expectedUserAgent: testUserAgent},
}

testRestClient, err := rest.UnversionedRESTClientFor(&testConfig)
assert.Nil(t, err)

testClient := &Client{
RESTClient: testRestClient,
Config: testConfig,
}

testClientWithAgent, err := testClient.WithAgent("testagent")
assert.Nil(t, err)

testRestClientWithAgent := testClientWithAgent.RESTClient.(*rest.RESTClient)

_, err = testRestClientWithAgent.Client.Transport.RoundTrip(&http.Request{})
assert.Nil(t, err)

// with invalid config
testClient = &Client{
Config: rest.Config{},
}

testClientWithAgent, err = testClient.WithAgent("testagent")
assert.NotNil(t, err)
assert.Nil(t, testClientWithAgent)
}

func (u userAgentRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
assert.Equal(u.t, u.expectedUserAgent, req.Header.Get("User-Agent"))
return &http.Response{}, nil
}
172 changes: 172 additions & 0 deletions pkg/client/mocks_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

90 changes: 90 additions & 0 deletions pkg/client/useragent_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package client

import (
"fmt"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/client-go/rest"
"net/http"
"testing"
)

func TestNewSharedClientFactoryWithAgent(t *testing.T) {
mockSharedClientFactory := NewMockSharedClientFactory(gomock.NewController(t))

testUserAgent := "testagent"
testConfig := rest.Config{
UserAgent: "defaultuseragent",
ContentConfig: rest.ContentConfig{
NegotiatedSerializer: serializer.WithoutConversionCodecFactory{},
},
Transport: userAgentRoundTripper{t: t, expectedUserAgent: testUserAgent},
}

testRestClient, err := rest.UnversionedRESTClientFor(&testConfig)
assert.Nil(t, err)
testClient := &Client{
RESTClient: testRestClient,
Config: testConfig,
}
mockSharedClientFactory.EXPECT().ForKind(gomock.Any()).DoAndReturn(func(gvk schema.GroupVersionKind) (*Client, error) {
return testClient, nil
}).AnyTimes()
mockSharedClientFactory.EXPECT().ForResource(gomock.Any(), gomock.Any()).DoAndReturn(func(gvr schema.GroupVersionResource, namespaced bool) (*Client, error) {
return testClient, nil
}).AnyTimes()
mockSharedClientFactory.EXPECT().ForResourceKind(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(gvr schema.GroupVersionResource, kind string, namespaced bool) *Client {
return testClient
}).AnyTimes()
testSharedClientFactoryWithAgent := NewSharedClientFactoryWithAgent("testagent", mockSharedClientFactory)

// for kind
clientWithAgent, err := testSharedClientFactoryWithAgent.ForKind(schema.GroupVersionKind{})
assert.Nil(t, err)

restClient := clientWithAgent.RESTClient.(*rest.RESTClient)
restClient.Client.Transport.RoundTrip(&http.Request{})

// for resource
clientWithAgent, err = testSharedClientFactoryWithAgent.ForResource(schema.GroupVersionResource{}, false)
assert.Nil(t, err)

restClient = clientWithAgent.RESTClient.(*rest.RESTClient)
restClient.Client.Transport.RoundTrip(&http.Request{})

// for resource kind
clientWithAgent = testSharedClientFactoryWithAgent.ForResourceKind(schema.GroupVersionResource{}, "", false)
assert.Nil(t, err)

restClient = clientWithAgent.RESTClient.(*rest.RESTClient)
restClient.Client.Transport.RoundTrip(&http.Request{})

// test with errors
mockSharedClientErrFactory := NewMockSharedClientFactory(gomock.NewController(t))
mockSharedClientErrFactory.EXPECT().ForKind(gomock.Any()).DoAndReturn(func(gvk schema.GroupVersionKind) (*Client, error) {
return nil, fmt.Errorf("some error")
}).AnyTimes()
mockSharedClientErrFactory.EXPECT().ForResource(gomock.Any(), gomock.Any()).DoAndReturn(func(gvr schema.GroupVersionResource, namespaced bool) (*Client, error) {
return nil, fmt.Errorf("some error")
}).AnyTimes()
mockSharedClientErrFactory.EXPECT().ForResourceKind(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(gvr schema.GroupVersionResource, kind string, namespaced bool) *Client {
return nil
}).AnyTimes()
testSharedClientFactoryWithAgent = NewSharedClientFactoryWithAgent("", mockSharedClientErrFactory)

// for kind
clientWithAgent, err = testSharedClientFactoryWithAgent.ForKind(schema.GroupVersionKind{})
assert.NotNil(t, err)
assert.Nil(t, clientWithAgent)

// for resource
clientWithAgent, err = testSharedClientFactoryWithAgent.ForResource(schema.GroupVersionResource{}, false)
assert.NotNil(t, err)
assert.Nil(t, clientWithAgent)

// for resource kind
clientWithAgent = testSharedClientFactoryWithAgent.ForResourceKind(schema.GroupVersionResource{}, "", false)
assert.Nil(t, clientWithAgent)
}
Loading

0 comments on commit f56b902

Please sign in to comment.