...

Source file src/github.com/launchdarkly/go-server-sdk/v6/ldclient_test.go

Documentation: github.com/launchdarkly/go-server-sdk/v6

     1  package ldclient
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/launchdarkly/go-server-sdk/v6/internal/sharedtest/mocks"
     9  
    10  	"github.com/launchdarkly/go-sdk-common/v3/lduser"
    11  	ldevents "github.com/launchdarkly/go-sdk-events/v2"
    12  	"github.com/launchdarkly/go-server-sdk/v6/internal/sharedtest"
    13  	"github.com/launchdarkly/go-server-sdk/v6/ldcomponents"
    14  	"github.com/launchdarkly/go-server-sdk/v6/subsystems"
    15  
    16  	"github.com/stretchr/testify/assert"
    17  	"github.com/stretchr/testify/require"
    18  )
    19  
    20  const testSdkKey = "test-sdk-key"
    21  
    22  func TestErrorFromComponentFactoryStopsClientCreation(t *testing.T) {
    23  	fakeError := errors.New("sorry")
    24  
    25  	doTest := func(name string, config Config, expectedError error) {
    26  		t.Run(name, func(t *testing.T) {
    27  			client, err := MakeCustomClient(testSdkKey, config, 0)
    28  			assert.Nil(t, client)
    29  			require.Error(t, err)
    30  			assert.Equal(t, expectedError.Error(), err.Error())
    31  		})
    32  	}
    33  
    34  	doTest("DataSource", Config{DataSource: mocks.ComponentConfigurerThatReturnsError[subsystems.DataSource]{Err: fakeError}}, fakeError)
    35  	doTest("DataStore", Config{DataStore: mocks.ComponentConfigurerThatReturnsError[subsystems.DataStore]{Err: fakeError}}, fakeError)
    36  	doTest("Events", Config{Events: mocks.ComponentConfigurerThatReturnsError[ldevents.EventProcessor]{Err: fakeError}}, fakeError)
    37  	doTest("HTTP", Config{HTTP: ldcomponents.HTTPConfiguration().CACert([]byte{1})}, errors.New("invalid CA certificate data"))
    38  }
    39  
    40  func TestSecureModeHash(t *testing.T) {
    41  	expected := "aa747c502a898200f9e4fa21bac68136f886a0e27aec70ba06daf2e2a5cb5597"
    42  	key := "Message"
    43  	config := Config{Offline: true}
    44  
    45  	client, _ := MakeCustomClient("secret", config, 0*time.Second)
    46  
    47  	hash := client.SecureModeHash(lduser.NewUser(key))
    48  
    49  	assert.Equal(t, expected, hash)
    50  }
    51  
    52  func TestMakeCustomClientWithFailedInitialization(t *testing.T) {
    53  	client, err := MakeCustomClient(testSdkKey, Config{
    54  		Logging:    ldcomponents.Logging().Loggers(sharedtest.NewTestLoggers()),
    55  		DataSource: mocks.DataSourceThatNeverInitializes(),
    56  		Events:     ldcomponents.NoEvents(),
    57  	}, time.Second)
    58  
    59  	assert.NotNil(t, client)
    60  	assert.Equal(t, err, ErrInitializationFailed)
    61  }
    62  
    63  func TestInvalidCharacterInSDKKey(t *testing.T) {
    64  	badKey := "my-bad-key\n"
    65  
    66  	_, err := MakeClient(badKey, time.Minute)
    67  	assert.Error(t, err)
    68  	assert.NotContains(t, err.Error(), "my-bad-key") // message shouldn't include the key value
    69  
    70  	_, err = MakeCustomClient(badKey, Config{}, time.Minute)
    71  	assert.Error(t, err)
    72  	assert.NotContains(t, err.Error(), "my-bad-key")
    73  }
    74  
    75  func makeTestClient() *LDClient {
    76  	return makeTestClientWithConfig(nil)
    77  }
    78  
    79  func makeTestClientWithConfig(modConfig func(*Config)) *LDClient {
    80  	config := Config{
    81  		Offline:    false,
    82  		DataStore:  ldcomponents.InMemoryDataStore(),
    83  		DataSource: mocks.DataSourceThatIsAlwaysInitialized(),
    84  		Events:     mocks.SingleComponentConfigurer[ldevents.EventProcessor]{Instance: &mocks.CapturingEventProcessor{}},
    85  		Logging:    ldcomponents.Logging().Loggers(sharedtest.NewTestLoggers()),
    86  	}
    87  	if modConfig != nil {
    88  		modConfig(&config)
    89  	}
    90  	client, _ := MakeCustomClient(testSdkKey, config, time.Duration(0))
    91  	return client
    92  }
    93  

View as plain text