...

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

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

     1  package ldclient
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/launchdarkly/go-server-sdk/v6/internal/sharedtest/mocks"
     7  
     8  	"github.com/launchdarkly/go-sdk-common/v3/ldlog"
     9  	"github.com/launchdarkly/go-sdk-common/v3/ldlogtest"
    10  	"github.com/launchdarkly/go-sdk-common/v3/ldvalue"
    11  	"github.com/launchdarkly/go-server-sdk-evaluation/v2/ldbuilders"
    12  	"github.com/launchdarkly/go-server-sdk/v6/interfaces"
    13  	"github.com/launchdarkly/go-server-sdk/v6/internal/datastore"
    14  	"github.com/launchdarkly/go-server-sdk/v6/internal/sharedtest"
    15  	"github.com/launchdarkly/go-server-sdk/v6/ldcomponents"
    16  	"github.com/launchdarkly/go-server-sdk/v6/subsystems"
    17  	"github.com/launchdarkly/go-server-sdk/v6/subsystems/ldstoreimpl"
    18  
    19  	"github.com/stretchr/testify/assert"
    20  )
    21  
    22  type clientExternalUpdatesTestParams struct {
    23  	client  *LDClient
    24  	store   subsystems.DataStore
    25  	mockLog *ldlogtest.MockLog
    26  }
    27  
    28  func withClientExternalUpdatesTestParams(callback func(clientExternalUpdatesTestParams)) {
    29  	p := clientExternalUpdatesTestParams{}
    30  	p.store = datastore.NewInMemoryDataStore(ldlog.NewDisabledLoggers())
    31  	p.mockLog = ldlogtest.NewMockLog()
    32  	config := Config{
    33  		DataSource: ldcomponents.ExternalUpdatesOnly(),
    34  		DataStore:  mocks.SingleComponentConfigurer[subsystems.DataStore]{Instance: p.store},
    35  		Logging:    ldcomponents.Logging().Loggers(p.mockLog.Loggers),
    36  	}
    37  	p.client, _ = MakeCustomClient("sdk_key", config, 0)
    38  	defer p.client.Close()
    39  	callback(p)
    40  }
    41  
    42  func TestClientExternalUpdatesMode(t *testing.T) {
    43  	t.Run("is initialized", func(t *testing.T) {
    44  		withClientExternalUpdatesTestParams(func(p clientExternalUpdatesTestParams) {
    45  			assert.True(t, p.client.Initialized())
    46  			assert.Equal(t, interfaces.DataSourceStateValid,
    47  				p.client.GetDataSourceStatusProvider().GetStatus().State)
    48  		})
    49  	})
    50  
    51  	t.Run("reports non-offline status", func(t *testing.T) {
    52  		withClientExternalUpdatesTestParams(func(p clientExternalUpdatesTestParams) {
    53  			assert.False(t, p.client.IsOffline())
    54  		})
    55  	})
    56  
    57  	t.Run("logs appropriate message at startup", func(t *testing.T) {
    58  		withClientExternalUpdatesTestParams(func(p clientExternalUpdatesTestParams) {
    59  			assert.Contains(
    60  				t,
    61  				p.mockLog.GetOutput(ldlog.Info),
    62  				"LaunchDarkly client will not connect to Launchdarkly for feature flag data",
    63  			)
    64  		})
    65  	})
    66  
    67  	t.Run("uses data from store", func(t *testing.T) {
    68  		flag := ldbuilders.NewFlagBuilder("flagkey").SingleVariation(ldvalue.Bool(true)).Build()
    69  
    70  		withClientExternalUpdatesTestParams(func(p clientExternalUpdatesTestParams) {
    71  			_, _ = p.store.Upsert(ldstoreimpl.Features(), flag.Key, sharedtest.FlagDescriptor(flag))
    72  			result, err := p.client.BoolVariation(flag.Key, evalTestUser, false)
    73  			assert.NoError(t, err)
    74  			assert.True(t, result)
    75  		})
    76  	})
    77  }
    78  

View as plain text