1package coordinator_test
2
3import (
4	"time"
5
6	"github.com/influxdata/influxdb/services/meta"
7	"github.com/influxdata/influxql"
8)
9
10// MetaClient is a mockable implementation of cluster.MetaClient.
11type MetaClient struct {
12	CreateContinuousQueryFn             func(database, name, query string) error
13	CreateDatabaseFn                    func(name string) (*meta.DatabaseInfo, error)
14	CreateDatabaseWithRetentionPolicyFn func(name string, spec *meta.RetentionPolicySpec) (*meta.DatabaseInfo, error)
15	CreateRetentionPolicyFn             func(database string, spec *meta.RetentionPolicySpec, makeDefault bool) (*meta.RetentionPolicyInfo, error)
16	CreateSubscriptionFn                func(database, rp, name, mode string, destinations []string) error
17	CreateUserFn                        func(name, password string, admin bool) (meta.User, error)
18	DatabaseFn                          func(name string) *meta.DatabaseInfo
19	DatabasesFn                         func() []meta.DatabaseInfo
20	DataNodeFn                          func(id uint64) (*meta.NodeInfo, error)
21	DataNodesFn                         func() ([]meta.NodeInfo, error)
22	DeleteDataNodeFn                    func(id uint64) error
23	DeleteMetaNodeFn                    func(id uint64) error
24	DropContinuousQueryFn               func(database, name string) error
25	DropDatabaseFn                      func(name string) error
26	DropRetentionPolicyFn               func(database, name string) error
27	DropSubscriptionFn                  func(database, rp, name string) error
28	DropShardFn                         func(id uint64) error
29	DropUserFn                          func(name string) error
30	MetaNodesFn                         func() ([]meta.NodeInfo, error)
31	RetentionPolicyFn                   func(database, name string) (rpi *meta.RetentionPolicyInfo, err error)
32	SetAdminPrivilegeFn                 func(username string, admin bool) error
33	SetPrivilegeFn                      func(username, database string, p influxql.Privilege) error
34	ShardGroupsByTimeRangeFn            func(database, policy string, min, max time.Time) (a []meta.ShardGroupInfo, err error)
35	TruncateShardGroupsFn               func(t time.Time) error
36	UpdateRetentionPolicyFn             func(database, name string, rpu *meta.RetentionPolicyUpdate, makeDefault bool) error
37	UpdateUserFn                        func(name, password string) error
38	UserPrivilegeFn                     func(username, database string) (*influxql.Privilege, error)
39	UserPrivilegesFn                    func(username string) (map[string]influxql.Privilege, error)
40	UsersFn                             func() []meta.UserInfo
41}
42
43func (c *MetaClient) CreateContinuousQuery(database, name, query string) error {
44	return c.CreateContinuousQueryFn(database, name, query)
45}
46
47func (c *MetaClient) CreateDatabase(name string) (*meta.DatabaseInfo, error) {
48	return c.CreateDatabaseFn(name)
49}
50
51func (c *MetaClient) CreateDatabaseWithRetentionPolicy(name string, spec *meta.RetentionPolicySpec) (*meta.DatabaseInfo, error) {
52	return c.CreateDatabaseWithRetentionPolicyFn(name, spec)
53}
54
55func (c *MetaClient) CreateRetentionPolicy(database string, spec *meta.RetentionPolicySpec, makeDefault bool) (*meta.RetentionPolicyInfo, error) {
56	return c.CreateRetentionPolicyFn(database, spec, makeDefault)
57}
58
59func (c *MetaClient) DropShard(id uint64) error {
60	return c.DropShardFn(id)
61}
62
63func (c *MetaClient) CreateSubscription(database, rp, name, mode string, destinations []string) error {
64	return c.CreateSubscriptionFn(database, rp, name, mode, destinations)
65}
66
67func (c *MetaClient) CreateUser(name, password string, admin bool) (meta.User, error) {
68	return c.CreateUserFn(name, password, admin)
69}
70
71func (c *MetaClient) Database(name string) *meta.DatabaseInfo {
72	return c.DatabaseFn(name)
73}
74
75func (c *MetaClient) Databases() []meta.DatabaseInfo {
76	return c.DatabasesFn()
77}
78
79func (c *MetaClient) DataNode(id uint64) (*meta.NodeInfo, error) {
80	return c.DataNodeFn(id)
81}
82
83func (c *MetaClient) DataNodes() ([]meta.NodeInfo, error) {
84	return c.DataNodesFn()
85}
86
87func (c *MetaClient) DeleteDataNode(id uint64) error {
88	return c.DeleteDataNodeFn(id)
89}
90
91func (c *MetaClient) DeleteMetaNode(id uint64) error {
92	return c.DeleteMetaNodeFn(id)
93}
94
95func (c *MetaClient) DropContinuousQuery(database, name string) error {
96	return c.DropContinuousQueryFn(database, name)
97}
98
99func (c *MetaClient) DropDatabase(name string) error {
100	return c.DropDatabaseFn(name)
101}
102
103func (c *MetaClient) DropRetentionPolicy(database, name string) error {
104	return c.DropRetentionPolicyFn(database, name)
105}
106
107func (c *MetaClient) DropSubscription(database, rp, name string) error {
108	return c.DropSubscriptionFn(database, rp, name)
109}
110
111func (c *MetaClient) DropUser(name string) error {
112	return c.DropUserFn(name)
113}
114
115func (c *MetaClient) MetaNodes() ([]meta.NodeInfo, error) {
116	return c.MetaNodesFn()
117}
118
119func (c *MetaClient) RetentionPolicy(database, name string) (rpi *meta.RetentionPolicyInfo, err error) {
120	return c.RetentionPolicyFn(database, name)
121}
122
123func (c *MetaClient) SetAdminPrivilege(username string, admin bool) error {
124	return c.SetAdminPrivilegeFn(username, admin)
125}
126
127func (c *MetaClient) SetPrivilege(username, database string, p influxql.Privilege) error {
128	return c.SetPrivilegeFn(username, database, p)
129}
130
131func (c *MetaClient) ShardGroupsByTimeRange(database, policy string, min, max time.Time) (a []meta.ShardGroupInfo, err error) {
132	return c.ShardGroupsByTimeRangeFn(database, policy, min, max)
133}
134
135func (c *MetaClient) TruncateShardGroups(t time.Time) error {
136	return c.TruncateShardGroupsFn(t)
137}
138
139func (c *MetaClient) UpdateRetentionPolicy(database, name string, rpu *meta.RetentionPolicyUpdate, makeDefault bool) error {
140	return c.UpdateRetentionPolicyFn(database, name, rpu, makeDefault)
141}
142
143func (c *MetaClient) UpdateUser(name, password string) error {
144	return c.UpdateUserFn(name, password)
145}
146
147func (c *MetaClient) UserPrivilege(username, database string) (*influxql.Privilege, error) {
148	return c.UserPrivilegeFn(username, database)
149}
150
151func (c *MetaClient) UserPrivileges(username string) (map[string]influxql.Privilege, error) {
152	return c.UserPrivilegesFn(username)
153}
154
155func (c *MetaClient) Users() []meta.UserInfo {
156	return c.UsersFn()
157}
158
159// DefaultMetaClientDatabaseFn returns a single database (db0) with a retention policy.
160func DefaultMetaClientDatabaseFn(name string) *meta.DatabaseInfo {
161	return &meta.DatabaseInfo{
162		Name: DefaultDatabase,
163		DefaultRetentionPolicy: DefaultRetentionPolicy,
164	}
165}
166