forked from deepfabric/elasticell
/
util_mock.go
123 lines (101 loc) · 2.79 KB
/
util_mock.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Copyright 2016 DeepFabric, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package pdserver
import (
"bytes"
"fmt"
"io/ioutil"
)
var (
testPort = 10000
baseAddrPattern = "127.0.0.1:%d"
httpAddrPattern = "http://127.0.0.1:%d"
testNamePattern = "test-pd-%d"
)
func getTestPort() int {
testPort++
return testPort
}
func genBaseAddr() string {
return fmt.Sprintf(baseAddrPattern, getTestPort())
}
func genHTTPAddr() string {
return fmt.Sprintf(httpAddrPattern, getTestPort())
}
func getTestName(index int) string {
return fmt.Sprintf(testNamePattern, index)
}
// NewTestSingleServer returns a single pd server
func NewTestSingleServer() *Server {
name := "test-single-pd"
addrPeer := genHTTPAddr()
addrClient := genHTTPAddr()
addrRPC := genBaseAddr()
return NewServer(newTestConfig(name,
addrClient,
addrPeer,
addrRPC,
fmt.Sprintf("%s=%s", name, addrPeer)))
}
// NewTestMultiServers returns multi pd server
func NewTestMultiServers(count int) []*Server {
var servers []*Server
var names []string
var addrClients []string
var addrPeers []string
var addrRPCs []string
buf := bytes.NewBufferString("")
for index := 0; index < count; index++ {
name := getTestName(index)
addrPeer := genHTTPAddr()
addrClient := genHTTPAddr()
addrRPC := genBaseAddr()
names = append(names, name)
addrClients = append(addrClients, addrClient)
addrPeers = append(addrPeers, addrPeer)
addrRPCs = append(addrRPCs, addrRPC)
buf.WriteString(fmt.Sprintf("%s=%s", name, addrPeer))
if index < count-1 {
buf.WriteString(",")
}
}
initCluster := string(buf.Bytes())
for index := 0; index < count; index++ {
cfg := newTestConfig(names[index],
addrClients[index],
addrPeers[index],
addrRPCs[index],
initCluster)
servers = append(servers, NewServer(cfg))
}
return servers
}
func newTestConfig(name, addrClient, addrPeer, addrRPC, initCluster string) *Cfg {
cfg := &Cfg{}
cfg.Name = name
cfg.DataPath, _ = ioutil.TempDir("/tmp", cfg.Name)
cfg.DurationLeaderLease = 1
cfg.AddrRPC = addrRPC
cfg.URLsClient = addrClient
cfg.URLsPeer = addrPeer
cfg.InitialCluster = initCluster
cfg.InitialClusterState = "new"
cfg.LimitReplicas = 3
cfg.LabelsLocation = []string{"zone", "rack"}
cfg.LimitSnapshots = 3
cfg.LimitStoreDownDuration = 1000
cfg.LimitScheduleLeader = 16
cfg.LimitScheduleCell = 12
cfg.LimitScheduleReplica = 16
return cfg
}