Skip to content

Commit

Permalink
Use the NewForTest for fake client testing
Browse files Browse the repository at this point in the history
  • Loading branch information
hwchiu committed Jun 26, 2018
1 parent 60a958f commit 60c3406
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 27 deletions.
14 changes: 0 additions & 14 deletions src/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,17 @@ import (
"encoding/json"
"fmt"
"os"
"path/filepath"

"github.com/linkernetworks/logger"
"github.com/linkernetworks/mongo"
"github.com/linkernetworks/redis"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)

type Config struct {
Redis *redis.RedisConfig `json:"redis"`
Mongo *mongo.MongoConfig `json:"mongo"`
Logger logger.LoggerConfig `json:"logger"`

Kubernetes *rest.Config `json:"kubernetes"`
// the version settings of the current application
Version string `json:"version"`
}
Expand All @@ -34,16 +30,6 @@ func Read(path string) (c Config, err error) {
return c, fmt.Errorf("Failed to load the config file: %v\n", err)
}

// FIXME, we need to find a way to test the fakeclient evne if we don't install the k8s
kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config")
c.Kubernetes, err = clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
c.Kubernetes, err = rest.InClusterConfig()
if err != nil {
fmt.Errorf("Load the kubernetes config fail, use the fake k8s clinet instead")
}
}

return c, nil
}

Expand Down
2 changes: 1 addition & 1 deletion src/networkcontroller/network_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package networkcontroller

import (
"fmt"
"github.com/docker/docker/pkg/namesgenerator"
"github.com/linkernetworks/vortex/src/entity"
"github.com/linkernetworks/vortex/src/kubernetes"
"github.com/moby/moby/pkg/namesgenerator"
"github.com/stretchr/testify/suite"
"math/rand"
"os"
Expand Down
2 changes: 1 addition & 1 deletion src/server/handler_network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ type NetworkTestSuite struct {

func (suite *NetworkTestSuite) SetupSuite() {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)
sp := serviceprovider.NewForTesting(cf)

//init session
suite.session = sp.Mongo.NewSession()
Expand Down
10 changes: 5 additions & 5 deletions src/server/handler_storage_provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (

func TestCreateStorageProvider(t *testing.T) {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)
sp := serviceprovider.NewForTesting(cf)

//Testing parameter
tName := namesgenerator.GetRandomName(0)
Expand Down Expand Up @@ -67,7 +67,7 @@ func TestCreateStorageProvider(t *testing.T) {

func TestDeleteStorageProvider(t *testing.T) {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)
sp := serviceprovider.NewForTest(cf)

//Testing parameter
tName := namesgenerator.GetRandomName(0)
Expand Down Expand Up @@ -107,7 +107,7 @@ func TestDeleteStorageProvider(t *testing.T) {

func TestInValidDeleteStorageProvider(t *testing.T) {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)
sp := serviceprovider.NewForTest(cf)

httpRequest, err := http.NewRequest("DELETE", "http://localhost:7890/v1/storageprovider/"+bson.NewObjectId().Hex(), nil)
assert.NoError(t, err)
Expand All @@ -121,7 +121,7 @@ func TestInValidDeleteStorageProvider(t *testing.T) {

func TestListStorageProvider(t *testing.T) {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)
sp := serviceprovider.NewForTest(cf)

session := sp.Mongo.NewSession()
defer session.Close()
Expand Down Expand Up @@ -189,7 +189,7 @@ func TestListStorageProvider(t *testing.T) {

func TestListInvalidStorageProvider(t *testing.T) {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)
sp := serviceprovider.NewForTest(cf)

//Invliad page size
httpRequest, err := http.NewRequest("GET", "http://localhost:7890/v1/storageprovider?page=0", nil)
Expand Down
2 changes: 1 addition & 1 deletion src/server/handler_volume_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ type VolumeTestSuite struct {

func (suite *VolumeTestSuite) SetupSuite() {
cf := config.MustRead("../../config/testing.json")
sp := serviceprovider.New(cf)
sp := serviceprovider.NewForTesting(cf)

//init session
suite.session = sp.Mongo.NewSession()
Expand Down
41 changes: 36 additions & 5 deletions src/serviceprovider/serviceprovider.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
package serviceprovider

import (
"fmt"
"github.com/linkernetworks/logger"
"github.com/linkernetworks/vortex/src/config"
"os"
"path/filepath"

"github.com/linkernetworks/mongo"
"github.com/linkernetworks/redis"
kubeCtl "github.com/linkernetworks/vortex/src/kubernetes"

"k8s.io/client-go/kubernetes"
fakeclientset "k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)

type Container struct {
Expand All @@ -34,14 +40,39 @@ func New(cf config.Config) *Container {
logger.Infof("Connecting to mongodb: %s", cf.Mongo.Url)
mongo := mongo.New(cf.Mongo.Url)

var clientset kubernetes.Interface
kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config")
k8s, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
k8s, err = rest.InClusterConfig()
if err != nil {
panic(fmt.Errorf("Load the kubernetes config fail"))
}
}

clientset := kubernetes.NewForConfigOrDie(k8s)

if cf.Kubernetes != nil {
clientset = kubernetes.NewForConfigOrDie(cf.Kubernetes)
} else {
clientset = fakeclientset.NewSimpleClientset()
sp := &Container{
Config: cf,
Redis: redisService,
Mongo: mongo,
KubeCtl: kubeCtl.New(clientset, "default"),
}

return sp
}

func NewForTesting(cf config.Config) *Container {
// setup logger configuration
logger.Setup(cf.Logger)

logger.Infof("Connecting to redis: %s", cf.Redis.Addr())
redisService := redis.New(cf.Redis)

logger.Infof("Connecting to mongodb: %s", cf.Mongo.Url)
mongo := mongo.New(cf.Mongo.Url)

clientset := fakeclientset.NewSimpleClientset()

sp := &Container{
Config: cf,
Redis: redisService,
Expand Down

0 comments on commit 60c3406

Please sign in to comment.