table_input_test.go 6.4 KB
Newer Older
Z
zhj-luo 已提交
1 2 3 4 5 6 7 8 9 10 11 12
/*
 * Copyright (c) 2023 OceanBase
 * OCP Express is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

W
wangzelin.wzl 已提交
13 14 15
package mysql

import (
O
ob-robot 已提交
16 17
	"context"
	"github.com/oceanbase/obagent/monitor/utils"
W
wangzelin.wzl 已提交
18
	"github.com/stretchr/testify/require"
O
ob-robot 已提交
19
	"testing"
W
wangzelin.wzl 已提交
20 21 22 23 24 25 26 27
)

func TestCollect(t *testing.T) {
	tableInput := &TableInput{}

	config := `
      maintainCacheThreads: 4
      connection:
O
ob-robot 已提交
28
        url: user:pass@tcp(127.0.0.1:9878)/oceanbase?interpolateParams=true
W
wangzelin.wzl 已提交
29 30 31 32 33 34 35 36
        maxIdle: 2
        maxOpen: 32
      defaultConditionValues:
        k0: 0
        k1: 1
      collectConfig:
        - sql: select t1, t2, m1, m2 from test_metric
          name: test
O
ob-robot 已提交
37 38
          minObVersion: ~
          maxObVersion: 4.0.0.0
W
wangzelin.wzl 已提交
39 40 41 42 43 44 45 46 47 48
          tags:
            tag1: t1
            tag2: t2
          metrics:
            metric1: m1
            metric2: m2
          conditionValues:
            c1: m1
    `
	configMap, _ := utils.DecodeYaml(config)
O
ob-robot 已提交
49 50
	tableInput.Init(context.Background(), configMap)
	metrics, err := tableInput.CollectMsgs(context.Background())
W
wangzelin.wzl 已提交
51
	require.True(t, err == nil)
O
ob-robot 已提交
52
	require.Equal(t, 0, len(metrics))
W
wangzelin.wzl 已提交
53
	v, ok := tableInput.ConditionValueMap.Load("c1")
O
ob-robot 已提交
54
	require.True(t, !ok)
W
wangzelin.wzl 已提交
55
	cv, _ := utils.ConvertToFloat64(v)
O
ob-robot 已提交
56
	require.Equal(t, 0.0, cv)
W
wangzelin.wzl 已提交
57 58 59 60 61 62 63 64
}

func TestCollectSqlFailed(t *testing.T) {
	tableInput := &TableInput{}

	config := `
      maintainCacheThreads: 4
      connection:
O
ob-robot 已提交
65
        url: user:pass@tcp(127.0.0.1:9878)/oceanbase?interpolateParams=true
W
wangzelin.wzl 已提交
66 67 68 69 70 71 72 73
        maxIdle: 2
        maxOpen: 32
      defaultConditionValues:
        k0: 0
        k1: 1
      collectConfig:
        - sql: select t1, t2, m1, m2 from test_metric1
          name: test
O
ob-robot 已提交
74 75
          minObVersion: ~
          maxObVersion: 4.0.0.0
W
wangzelin.wzl 已提交
76 77 78 79 80 81 82 83 84
          tags:
            tag1: t1
            tag2: t2
          metrics:
            metric1: m1
            metric2: m2
    `

	configMap, _ := utils.DecodeYaml(config)
O
ob-robot 已提交
85 86
	tableInput.Init(context.Background(), configMap)
	metrics, err := tableInput.CollectMsgs(context.Background())
W
wangzelin.wzl 已提交
87 88 89 90 91 92 93 94 95 96
	require.True(t, err == nil)
	require.Equal(t, 0, len(metrics))
}

func TestCollectConvertFailed(t *testing.T) {
	tableInput := &TableInput{}

	config := `
      maintainCacheThreads: 4
      connection:
O
ob-robot 已提交
97
        url: user:pass@tcp(127.0.0.1:9878)/oceanbase?interpolateParams=true
W
wangzelin.wzl 已提交
98 99 100 101 102 103 104 105
        maxIdle: 2
        maxOpen: 32
      defaultConditionValues:
        k0: 0
        k1: 1
      collectConfig:
        - sql: select t1, t2, m1, m2 from test_metric1
          name: test
O
ob-robot 已提交
106 107
          minObVersion: ~
          maxObVersion: 4.0.0.0
W
wangzelin.wzl 已提交
108 109 110 111 112 113 114 115 116
          tags:
            tag1: m1
            tag2: t2
          metrics:
            metric1: t1
            metric2: m2
    `

	configMap, _ := utils.DecodeYaml(config)
O
ob-robot 已提交
117 118 119 120
	tableInput.Init(context.Background(), configMap)
	tableInput.Ob.MetaInfo.Version = "2.2.77"

	metrics, err := tableInput.CollectMsgs(context.Background())
W
wangzelin.wzl 已提交
121 122 123 124 125 126 127 128 129 130
	require.True(t, err == nil)
	require.Equal(t, 0, len(metrics))
}

func TestCollectConditionNotSatisfied(t *testing.T) {
	tableInput := &TableInput{}

	config := `
      maintainCacheThreads: 4
      connection:
O
ob-robot 已提交
131
        url: user:pass@tcp(127.0.0.1:9878)/oceanbase?interpolateParams=true
W
wangzelin.wzl 已提交
132 133 134 135 136 137 138 139
        maxIdle: 2
        maxOpen: 32
      defaultConditionValues:
        k0: 0
        k1: 1
      collectConfig:
        - sql: select t1, t2, m1, m2 from test_metric
          name: test
O
ob-robot 已提交
140 141 142
          minObVersion: ~
          maxObVersion: 4.0.0.0
          condition: k0
W
wangzelin.wzl 已提交
143 144 145 146 147 148 149 150 151
          tags:
            tag1: t1
            tag2: t2
          metrics:
            metric1: m1
            metric2: m2
    `

	configMap, _ := utils.DecodeYaml(config)
O
ob-robot 已提交
152 153
	tableInput.Init(context.Background(), configMap)
	metrics, err := tableInput.CollectMsgs(context.Background())
W
wangzelin.wzl 已提交
154 155 156 157 158 159 160 161 162 163
	require.True(t, err == nil)
	require.Equal(t, 0, len(metrics))
}

func TestCollectConditionNotFound(t *testing.T) {
	tableInput := &TableInput{}

	config := `
      maintainCacheThreads: 4
      connection:
O
ob-robot 已提交
164
        url: user:pass@tcp(127.0.0.1:9878)/oceanbase?interpolateParams=true
W
wangzelin.wzl 已提交
165 166 167 168 169 170 171 172
        maxIdle: 2
        maxOpen: 32
      defaultConditionValues:
        k0: 0
        k1: 1
      collectConfig:
        - sql: select t1, t2, m1, m2 from test_metric
          name: test
O
ob-robot 已提交
173 174 175
          minObVersion: ~
          maxObVersion: 4.0.0.0
          condition: k2
W
wangzelin.wzl 已提交
176 177 178 179 180 181 182 183 184
          tags:
            tag1: t1
            tag2: t2
          metrics:
            metric1: m1
            metric2: m2
    `

	configMap, _ := utils.DecodeYaml(config)
O
ob-robot 已提交
185 186
	tableInput.Init(context.Background(), configMap)
	metrics, err := tableInput.CollectMsgs(context.Background())
W
wangzelin.wzl 已提交
187 188 189 190 191 192 193 194 195 196
	require.True(t, err == nil)
	require.Equal(t, 0, len(metrics))
}

func TestCollectConditionNotBool(t *testing.T) {
	tableInput := &TableInput{}

	config := `
      maintainCacheThreads: 4
      connection:
O
ob-robot 已提交
197
        url: user:pass@tcp(127.0.0.1:9878)/oceanbase?interpolateParams=true
W
wangzelin.wzl 已提交
198 199 200 201 202 203 204 205 206
        maxIdle: 2
        maxOpen: 32
      defaultConditionValues:
        k0: 0
        k1: 1
        k2: x
      collectConfig:
        - sql: select t1, t2, m1, m2 from test_metric
          name: test
O
ob-robot 已提交
207 208 209
          minObVersion: ~
          maxObVersion: 4.0.0.0
          condition: k2
W
wangzelin.wzl 已提交
210 211 212 213 214 215 216 217 218
          tags:
            tag1: t1
            tag2: t2
          metrics:
            metric1: m1
            metric2: m2
    `

	configMap, _ := utils.DecodeYaml(config)
O
ob-robot 已提交
219 220
	tableInput.Init(context.Background(), configMap)
	metrics, err := tableInput.CollectMsgs(context.Background())
W
wangzelin.wzl 已提交
221 222 223 224
	require.True(t, err == nil)
	require.Equal(t, 0, len(metrics))
}

O
ob-robot 已提交
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
func TestVersionSatisfied(t *testing.T) {
	unsatisfy := versionSatisfied("0.0.0", "4.0.0.0", "4.0.0.0")
	require.True(t, !unsatisfy)
	satisfy := versionSatisfied("0.0.0", "4.0.0.0", "3.2.3")
	require.True(t, satisfy)
	unsatisfyMinInfinity := versionSatisfied("", "4.0.0.0", "4.0.0.0")
	require.True(t, !unsatisfyMinInfinity)
	satisfyMinInfinity := versionSatisfied("", "4.0.0.0", "3.2.3")
	require.True(t, satisfyMinInfinity)
	unsatisfyMaxInfinity := versionSatisfied("4.0.0.0", "", "3.2.3")
	require.True(t, !unsatisfyMaxInfinity)
	satisfyMaxInfinity := versionSatisfied("4.0.0.0", "", "4.0.0.0")
	require.True(t, satisfyMaxInfinity)
	noVersion := versionSatisfied("", "", "3.2.3")
	require.True(t, noVersion)
W
wangzelin.wzl 已提交
240
}