github.com/wostzone/hub/auth@v0.0.0-20220118060317-7bb375743b17/pkg/authservice/AuthService_test.go (about)

     1  package authservice_test
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/sirupsen/logrus"
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/wostzone/hub/auth/pkg/authservice"
     8  	"github.com/wostzone/hub/lib/client/pkg/testenv"
     9  	"github.com/wostzone/hub/lib/client/pkg/tlsclient"
    10  	"os"
    11  	"path"
    12  	"testing"
    13  	"time"
    14  )
    15  
    16  var serverAddress = "127.0.0.1"
    17  var serverPort uint = 9881
    18  var testCerts testenv.TestCerts
    19  var passwordFile string
    20  var serverCertFolder string
    21  var clientHostPort string
    22  
    23  var storeFolder = ""
    24  
    25  const user1 = "user1"
    26  const pass1 = "secret1"
    27  
    28  // helper to start the auth service for testing
    29  // containing a password for user1
    30  func startAuthService() (*authservice.AuthService, error) {
    31  	config := authservice.AuthServiceConfig{
    32  		Address:            serverAddress,
    33  		Port:               serverPort,
    34  		PasswordFile:       passwordFile,
    35  		ConfigStoreFolder:  storeFolder,
    36  		ConfigStoreEnabled: true,
    37  	}
    38  	srv := authservice.NewJwtAuthService(config, nil, testCerts.ServerCert, testCerts.CaCert)
    39  	err := srv.Start()
    40  	srv.SetPassword(user1, pass1)
    41  	return srv, err
    42  }
    43  
    44  // TestMain runs a http server
    45  // Used for all test cases in this package
    46  func TestMain(m *testing.M) {
    47  	logrus.Infof("------ TestMain of AuthService_test ------")
    48  	clientHostPort = fmt.Sprintf("%s:%d", serverAddress, serverPort)
    49  
    50  	cwd, _ := os.Getwd()
    51  	homeFolder := path.Join(cwd, "..", "..", "test")
    52  	serverCertFolder = path.Join(homeFolder, "certs")
    53  	storeFolder = path.Join(homeFolder, "configStore")
    54  	passwordFile = path.Join(homeFolder, "config", "test.passwd")
    55  	// empty file
    56  	fp, _ := os.Create(passwordFile)
    57  	fp.Close()
    58  
    59  	testCerts = testenv.CreateCertBundle()
    60  	res := m.Run()
    61  
    62  	time.Sleep(time.Second)
    63  	os.Exit(res)
    64  }
    65  
    66  // Create and verify a JWT token
    67  func TestStartStop(t *testing.T) {
    68  	//user1 := "user1"
    69  	srv, err := startAuthService()
    70  	assert.NoError(t, err)
    71  
    72  	// start twice should not break things
    73  	err = srv.Start()
    74  	assert.Error(t, err)
    75  
    76  	srv.Stop()
    77  	// stopping twice should not break things
    78  	srv.Stop()
    79  }
    80  
    81  // Create and verify a JWT token
    82  func TestStartTwice(t *testing.T) {
    83  	//user1 := "user1"
    84  	srv, err := startAuthService()
    85  	assert.NoError(t, err)
    86  
    87  	// run duplicate should fail
    88  	srv2, err := startAuthService()
    89  	assert.Error(t, err)
    90  	srv2.Stop()
    91  
    92  	srv.Stop()
    93  }
    94  
    95  func TestLogin(t *testing.T) {
    96  	pass2 := "secret2"
    97  	srv, err := startAuthService()
    98  	assert.NoError(t, err)
    99  	//
   100  	hostPort := fmt.Sprintf("%s:%d", serverAddress, serverPort)
   101  	authClient := tlsclient.NewTLSClient(hostPort, testCerts.CaCert)
   102  
   103  	accessToken, err := authClient.ConnectWithLoginID(user1, pass1)
   104  	assert.NoError(t, err)
   105  	assert.NotEmpty(t, accessToken)
   106  
   107  	accessToken, err = authClient.ConnectWithLoginID(user1, pass2)
   108  	assert.Error(t, err)
   109  	assert.Empty(t, accessToken)
   110  
   111  	srv.Stop()
   112  }
   113  
   114  func TestRefresh(t *testing.T) {
   115  	//user1 := "user1"
   116  }
   117  
   118  func TestRefreshInvalid(t *testing.T) {
   119  	//user1 := "user1"
   120  }
   121  
   122  func TestGetConfig(t *testing.T) {
   123  	srv, err := startAuthService()
   124  	assert.NoError(t, err)
   125  	//
   126  	hostPort := fmt.Sprintf("%s:%d", serverAddress, serverPort)
   127  	authClient := tlsclient.NewTLSClient(hostPort, testCerts.CaCert)
   128  
   129  	accessToken, err := authClient.ConnectWithLoginID(user1, pass1)
   130  	assert.NoError(t, err)
   131  	assert.NotEmpty(t, accessToken)
   132  
   133  	myConfig := "my configuration object"
   134  	_, err = authClient.Put(tlsclient.DefaultJWTConfigPath+"/app1", myConfig)
   135  	assert.NoError(t, err)
   136  
   137  	data, err := authClient.Get(tlsclient.DefaultJWTConfigPath + "/app1")
   138  	assert.NoError(t, err)
   139  	assert.Equal(t, myConfig, string(data))
   140  
   141  	data, err = authClient.Get(tlsclient.DefaultJWTConfigPath + "/app2")
   142  	assert.NoError(t, err)
   143  	assert.Empty(t, data)
   144  	srv.Stop()
   145  
   146  }
   147  
   148  func TestUpdateConfigBadMethod(t *testing.T) {
   149  	srv, err := startAuthService()
   150  	assert.NoError(t, err)
   151  
   152  	myConfig := "my configuration object"
   153  	hostPort := fmt.Sprintf("%s:%d", serverAddress, serverPort)
   154  	authClient := tlsclient.NewTLSClient(hostPort, testCerts.CaCert)
   155  	accessToken, err := authClient.ConnectWithLoginID(user1, pass1)
   156  	_ = accessToken
   157  	assert.NoError(t, err)
   158  
   159  	_, err = authClient.Post(tlsclient.DefaultJWTConfigPath+"/app1", myConfig)
   160  	assert.Error(t, err)
   161  	srv.Stop()
   162  
   163  }