...

Source file src/github.com/launchdarkly/go-server-sdk/v6/ldclient_offline_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-server-sdk/v6/interfaces"
    11  	"github.com/launchdarkly/go-server-sdk/v6/internal/datastore"
    12  	"github.com/launchdarkly/go-server-sdk/v6/ldcomponents"
    13  	"github.com/launchdarkly/go-server-sdk/v6/subsystems"
    14  
    15  	"github.com/stretchr/testify/assert"
    16  )
    17  
    18  type clientOfflineTestParams struct {
    19  	client  *LDClient
    20  	store   subsystems.DataStore
    21  	mockLog *ldlogtest.MockLog
    22  }
    23  
    24  func withClientOfflineTestParams(callback func(clientExternalUpdatesTestParams)) {
    25  	p := clientExternalUpdatesTestParams{}
    26  	p.store = datastore.NewInMemoryDataStore(ldlog.NewDisabledLoggers())
    27  	p.mockLog = ldlogtest.NewMockLog()
    28  	config := Config{
    29  		Offline:   true,
    30  		DataStore: mocks.SingleComponentConfigurer[subsystems.DataStore]{Instance: p.store},
    31  		Logging:   ldcomponents.Logging().Loggers(p.mockLog.Loggers),
    32  	}
    33  	p.client, _ = MakeCustomClient("sdk_key", config, 0)
    34  	defer p.client.Close()
    35  	callback(p)
    36  }
    37  
    38  func TestClientOfflineMode(t *testing.T) {
    39  	t.Run("is initialized", func(t *testing.T) {
    40  		withClientOfflineTestParams(func(p clientExternalUpdatesTestParams) {
    41  			assert.True(t, p.client.Initialized())
    42  			assert.Equal(t, interfaces.DataSourceStateValid,
    43  				p.client.GetDataSourceStatusProvider().GetStatus().State)
    44  		})
    45  	})
    46  
    47  	t.Run("reports offline status", func(t *testing.T) {
    48  		withClientOfflineTestParams(func(p clientExternalUpdatesTestParams) {
    49  			assert.True(t, p.client.IsOffline())
    50  		})
    51  	})
    52  
    53  	t.Run("logs appropriate message at startup", func(t *testing.T) {
    54  		withClientOfflineTestParams(func(p clientExternalUpdatesTestParams) {
    55  			assert.Contains(
    56  				t,
    57  				p.mockLog.GetOutput(ldlog.Info),
    58  				"Starting LaunchDarkly client in offline mode",
    59  			)
    60  		})
    61  	})
    62  
    63  	t.Run("returns default values", func(t *testing.T) {
    64  		withClientOfflineTestParams(func(p clientExternalUpdatesTestParams) {
    65  			result, err := p.client.BoolVariation("flagkey", evalTestUser, false)
    66  			assert.NoError(t, err)
    67  			assert.False(t, result)
    68  		})
    69  	})
    70  
    71  	t.Run("returns invalid state from AllFlagsState", func(t *testing.T) {
    72  		withClientOfflineTestParams(func(p clientExternalUpdatesTestParams) {
    73  			result := p.client.AllFlagsState(evalTestUser)
    74  			assert.False(t, result.IsValid())
    75  		})
    76  	})
    77  }
    78  

View as plain text