github.com/matrixorigin/matrixone@v0.7.0/cmd/mo-service/config_test.go (about) 1 // Copyright 2022 Matrix Origin 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package main 16 17 import ( 18 "reflect" 19 "testing" 20 21 "github.com/matrixorigin/matrixone/pkg/defines" 22 "github.com/matrixorigin/matrixone/pkg/dnservice" 23 "github.com/matrixorigin/matrixone/pkg/fileservice" 24 "github.com/matrixorigin/matrixone/pkg/logservice" 25 "github.com/stretchr/testify/assert" 26 ) 27 28 func TestParseDNConfig(t *testing.T) { 29 data := ` 30 # service node type, [DN|CN|LOG] 31 service-type = "DN" 32 33 [log] 34 level = "debug" 35 format = "json" 36 max-size = 512 37 38 [hakeeper-client] 39 service-addresses = [ 40 "1", 41 "2" 42 ] 43 44 [[fileservice]] 45 # local fileservice instance, used to store TAE Data and DNStore metadata. 46 name = "local" 47 # use disk as fileservice backend 48 backend = "DISK" 49 # set the directory used by DISK backend. There must has a file named "thisisalocalfileservicedir" 50 # in the data dir 51 data-dir = "data dir" 52 53 [[fileservice]] 54 # s3 fileservice instance, used to store data. 55 name = "SHARED" 56 # use disk as fileservice backend. 57 backend = "DISK" 58 # set the directory used by DISK backend. There must has a file named "thisisalocalfileservicedir" 59 # in the data dir 60 data-dir = "data dir" 61 62 [dn.Txn.Storage] 63 # txn storage backend implementation. [TAE|MEM] 64 backend = "MEM" 65 ` 66 cfg := &Config{} 67 err := parseFromString(data, cfg) 68 assert.NoError(t, err) 69 assert.Equal(t, dnservice.StorageMEM, cfg.DN.Txn.Storage.Backend) 70 assert.Equal(t, 2, len(cfg.FileServices)) 71 assert.Equal(t, "local", cfg.FileServices[0].Name) 72 assert.Equal(t, defines.SharedFileServiceName, cfg.FileServices[1].Name) 73 assert.Equal(t, 2, len(cfg.getDNServiceConfig().HAKeeper.ClientConfig.ServiceAddresses)) 74 } 75 76 func TestFileServiceFactory(t *testing.T) { 77 c := &Config{} 78 c.FileServices = append(c.FileServices, fileservice.Config{ 79 Name: "a", 80 Backend: "MEM", 81 }) 82 c.FileServices = append(c.FileServices, fileservice.Config{ 83 Name: defines.LocalFileServiceName, 84 Backend: "MEM", 85 }) 86 c.FileServices = append(c.FileServices, fileservice.Config{ 87 Name: defines.SharedFileServiceName, 88 Backend: "MEM", 89 }) 90 c.FileServices = append(c.FileServices, fileservice.Config{ 91 Name: defines.ETLFileServiceName, 92 Backend: "DISK-ETL", 93 }) 94 95 fs, err := c.createFileService("A") 96 assert.NoError(t, err) 97 assert.NotNil(t, fs) 98 } 99 100 func TestResolveGossipSeedAddresses(t *testing.T) { 101 tests := []struct { 102 addrs []string 103 results []string 104 err error 105 }{ 106 { 107 []string{"localhost:32001", "localhost:32011"}, 108 []string{"127.0.0.1:32001", "127.0.0.1:32011"}, 109 nil, 110 }, 111 { 112 []string{"localhost:32001", "localhost:32011", "127.0.0.1:32021"}, 113 []string{"127.0.0.1:32001", "127.0.0.1:32011", "127.0.0.1:32021"}, 114 nil, 115 }, 116 { 117 []string{"127.0.0.1:32001"}, 118 []string{"127.0.0.1:32001"}, 119 nil, 120 }, 121 { 122 []string{"localhost:32001", "of-course-no-such-address42033.io:32001"}, 123 []string{"127.0.0.1:32001", "of-course-no-such-address42033.io:32001"}, 124 nil, 125 }, 126 } 127 128 for _, tt := range tests { 129 cfg := Config{ 130 LogService: logservice.Config{ 131 GossipSeedAddresses: tt.addrs, 132 }, 133 } 134 err := cfg.resolveGossipSeedAddresses() 135 if err != tt.err { 136 t.Errorf("expected %v, got %v", tt.err, err) 137 } 138 if got := cfg.LogService.GossipSeedAddresses; !reflect.DeepEqual(got, tt.results) { 139 t.Errorf("expected %v, got %v", tt.results, got) 140 } 141 } 142 } 143 144 func TestGossipSeedAddressesAreResolved(t *testing.T) { 145 data := ` 146 service-type = "LOG" 147 148 [log] 149 level = "debug" 150 format = "json" 151 max-size = 512 152 153 [logservice] 154 deployment-id = 1 155 uuid = "9c4dccb4-4d3c-41f8-b482-5251dc7a41bf" 156 gossip-seed-addresses = [ 157 "localhost:32002", 158 ] 159 160 [logservice.BootstrapConfig] 161 bootstrap-cluster = true 162 num-of-log-shards = 1 163 num-of-dn-shards = 1 164 num-of-log-shard-replicas = 1 165 init-hakeeper-members = [ 166 "131072:9c4dccb4-4d3c-41f8-b482-5251dc7a41bf", 167 ] 168 169 [hakeeper-client] 170 service-addresses = [ 171 "127.0.0.1:32000", 172 ] 173 ` 174 cfg := &Config{} 175 err := parseFromString(data, cfg) 176 assert.NoError(t, err) 177 assert.NoError(t, cfg.validate()) 178 assert.NoError(t, cfg.resolveGossipSeedAddresses()) 179 assert.Equal(t, 1, len(cfg.LogService.GossipSeedAddresses)) 180 assert.Equal(t, "127.0.0.1:32002", cfg.LogService.GossipSeedAddresses[0]) 181 }