package serverv2_test import ( "context" "os" "path/filepath" "testing" "time" gogoproto "github.com/cosmos/gogoproto/proto" "github.com/spf13/viper" "github.com/stretchr/testify/require" coreapp "cosmossdk.io/core/app" "cosmossdk.io/core/transaction" "cosmossdk.io/log" serverv2 "cosmossdk.io/server/v2" grpc "cosmossdk.io/server/v2/api/grpc" "cosmossdk.io/server/v2/appmanager" ) type mockInterfaceRegistry struct{} func (*mockInterfaceRegistry) Resolve(typeUrl string) (gogoproto.Message, error) { panic("not implemented") } func (*mockInterfaceRegistry) ListImplementations(ifaceTypeURL string) []string { panic("not implemented") } func (*mockInterfaceRegistry) ListAllInterfaces() []string { panic("not implemented") } type mockApp[T transaction.Tx] struct { serverv2.AppI[T] } func (*mockApp[T]) GetGPRCMethodsToMessageMap() map[string]func() gogoproto.Message { return map[string]func() gogoproto.Message{} } func (*mockApp[T]) GetAppManager() *appmanager.AppManager[T] { return nil } func (*mockApp[T]) InterfaceRegistry() coreapp.InterfaceRegistry { return &mockInterfaceRegistry{} } func TestServer(t *testing.T) { currentDir, err := os.Getwd() require.NoError(t, err) configPath := filepath.Join(currentDir, "testdata") v, err := serverv2.ReadConfig(configPath) if err != nil { v = viper.New() } logger := log.NewLogger(os.Stdout) grpcServer := grpc.New[transaction.Tx]() err = grpcServer.Init(&mockApp[transaction.Tx]{}, v, logger) require.NoError(t, err) mockServer := &mockServer{name: "mock-server-1", ch: make(chan string, 100)} server := serverv2.NewServer( logger, grpcServer, mockServer, ) serverCfgs := server.Configs() require.Equal(t, serverCfgs[grpcServer.Name()].(*grpc.Config).Address, grpc.DefaultConfig().Address) require.Equal(t, serverCfgs[mockServer.Name()].(*mockServerConfig).MockFieldOne, MockServerDefaultConfig().MockFieldOne) // write config err = server.WriteConfig(configPath) require.NoError(t, err) v, err = serverv2.ReadConfig(configPath) require.NoError(t, err) require.Equal(t, v.GetString(grpcServer.Name()+".address"), grpc.DefaultConfig().Address) // start empty ctx, cancelFn := context.WithCancel(context.TODO()) go func() { // wait 5sec and cancel context <-time.After(5 * time.Second) cancelFn() err = server.Stop(ctx) require.NoError(t, err) }() err = server.Start(ctx) require.NoError(t, err) }