github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/store/storetest/cluster_discovery_store.go (about)

     1  // Copyright (c) 2015-present Xenia, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package storetest
     5  
     6  import (
     7  	"testing"
     8  
     9  	"time"
    10  
    11  	"github.com/xzl8028/xenia-server/model"
    12  	"github.com/xzl8028/xenia-server/store"
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func TestClusterDiscoveryStore(t *testing.T, ss store.Store) {
    18  	t.Run("", func(t *testing.T) { testClusterDiscoveryStore(t, ss) })
    19  	t.Run("Delete", func(t *testing.T) { testClusterDiscoveryStoreDelete(t, ss) })
    20  	t.Run("LastPing", func(t *testing.T) { testClusterDiscoveryStoreLastPing(t, ss) })
    21  	t.Run("Exists", func(t *testing.T) { testClusterDiscoveryStoreExists(t, ss) })
    22  	t.Run("ClusterDiscoveryGetStore", func(t *testing.T) { testClusterDiscoveryGetStore(t, ss) })
    23  }
    24  
    25  func testClusterDiscoveryStore(t *testing.T, ss store.Store) {
    26  	discovery := &model.ClusterDiscovery{
    27  		ClusterName: "cluster_name",
    28  		Hostname:    "hostname" + model.NewId(),
    29  		Type:        "test_test",
    30  	}
    31  
    32  	if err := ss.ClusterDiscovery().Save(discovery); err != nil {
    33  		t.Fatal(err)
    34  	}
    35  
    36  	if err := ss.ClusterDiscovery().Cleanup(); err != nil {
    37  		t.Fatal(err)
    38  	}
    39  }
    40  
    41  func testClusterDiscoveryStoreDelete(t *testing.T, ss store.Store) {
    42  	discovery := &model.ClusterDiscovery{
    43  		ClusterName: "cluster_name",
    44  		Hostname:    "hostname" + model.NewId(),
    45  		Type:        "test_test",
    46  	}
    47  
    48  	if err := ss.ClusterDiscovery().Save(discovery); err != nil {
    49  		t.Fatal(err)
    50  	}
    51  
    52  	if _, err := ss.ClusterDiscovery().Delete(discovery); err != nil {
    53  		t.Fatal(err)
    54  	}
    55  }
    56  
    57  func testClusterDiscoveryStoreLastPing(t *testing.T, ss store.Store) {
    58  	discovery := &model.ClusterDiscovery{
    59  		ClusterName: "cluster_name_lastPing",
    60  		Hostname:    "hostname" + model.NewId(),
    61  		Type:        "test_test_lastPing" + model.NewId(),
    62  	}
    63  
    64  	if err := ss.ClusterDiscovery().Save(discovery); err != nil {
    65  		t.Fatal(err)
    66  	}
    67  
    68  	if err := ss.ClusterDiscovery().SetLastPingAt(discovery); err != nil {
    69  		t.Fatal(err)
    70  	}
    71  
    72  	ttime := model.GetMillis()
    73  
    74  	time.Sleep(1 * time.Second)
    75  
    76  	if err := ss.ClusterDiscovery().SetLastPingAt(discovery); err != nil {
    77  		t.Fatal(err)
    78  	}
    79  
    80  	list, err := ss.ClusterDiscovery().GetAll(discovery.Type, "cluster_name_lastPing")
    81  	require.Nil(t, err)
    82  	assert.Len(t, list, 1)
    83  
    84  	if list[0].LastPingAt-ttime < 500 {
    85  		t.Fatal("failed to set time")
    86  	}
    87  
    88  	discovery2 := &model.ClusterDiscovery{
    89  		ClusterName: "cluster_name_missing",
    90  		Hostname:    "hostname" + model.NewId(),
    91  		Type:        "test_test_missing",
    92  	}
    93  
    94  	if err := ss.ClusterDiscovery().SetLastPingAt(discovery2); err != nil {
    95  		t.Fatal(err)
    96  	}
    97  }
    98  
    99  func testClusterDiscoveryStoreExists(t *testing.T, ss store.Store) {
   100  	discovery := &model.ClusterDiscovery{
   101  		ClusterName: "cluster_name_Exists",
   102  		Hostname:    "hostname" + model.NewId(),
   103  		Type:        "test_test_Exists" + model.NewId(),
   104  	}
   105  
   106  	if err := ss.ClusterDiscovery().Save(discovery); err != nil {
   107  		t.Fatal(err)
   108  	}
   109  
   110  	val, err := ss.ClusterDiscovery().Exists(discovery)
   111  	require.Nil(t, err)
   112  	assert.True(t, val)
   113  
   114  	discovery.ClusterName = "cluster_name_Exists2"
   115  
   116  	val, err = ss.ClusterDiscovery().Exists(discovery)
   117  	require.Nil(t, err)
   118  	assert.False(t, val)
   119  }
   120  
   121  func testClusterDiscoveryGetStore(t *testing.T, ss store.Store) {
   122  	testType1 := model.NewId()
   123  
   124  	discovery1 := &model.ClusterDiscovery{
   125  		ClusterName: "cluster_name",
   126  		Hostname:    "hostname1",
   127  		Type:        testType1,
   128  	}
   129  	require.Nil(t, ss.ClusterDiscovery().Save(discovery1))
   130  
   131  	discovery2 := &model.ClusterDiscovery{
   132  		ClusterName: "cluster_name",
   133  		Hostname:    "hostname2",
   134  		Type:        testType1,
   135  	}
   136  	require.Nil(t, ss.ClusterDiscovery().Save(discovery2))
   137  
   138  	discovery3 := &model.ClusterDiscovery{
   139  		ClusterName: "cluster_name",
   140  		Hostname:    "hostname3",
   141  		Type:        testType1,
   142  		CreateAt:    1,
   143  		LastPingAt:  1,
   144  	}
   145  	require.Nil(t, ss.ClusterDiscovery().Save(discovery3))
   146  
   147  	testType2 := model.NewId()
   148  
   149  	discovery4 := &model.ClusterDiscovery{
   150  		ClusterName: "cluster_name",
   151  		Hostname:    "hostname1",
   152  		Type:        testType2,
   153  	}
   154  	require.Nil(t, ss.ClusterDiscovery().Save(discovery4))
   155  
   156  	list, err := ss.ClusterDiscovery().GetAll(testType1, "cluster_name")
   157  	require.Nil(t, err)
   158  	assert.Len(t, list, 2)
   159  
   160  	list, err = ss.ClusterDiscovery().GetAll(testType2, "cluster_name")
   161  	require.Nil(t, err)
   162  	assert.Len(t, list, 1)
   163  
   164  	list, err = ss.ClusterDiscovery().GetAll(model.NewId(), "cluster_name")
   165  	require.Nil(t, err)
   166  	assert.Len(t, list, 0)
   167  }