Skip to content

Commit

Permalink
telemetry: clean up test code (pingcap#27813)
Browse files Browse the repository at this point in the history
  • Loading branch information
tisonkun authored Sep 6, 2021
1 parent 9343c2e commit e1216e5
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 107 deletions.
29 changes: 2 additions & 27 deletions telemetry/data_feature_usage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,16 @@ import (
"fmt"
"testing"

"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/session"
"github.com/pingcap/tidb/sessionctx/variable"
"github.com/pingcap/tidb/store/mockstore"
"github.com/pingcap/tidb/telemetry"
"github.com/pingcap/tidb/testkit"
"github.com/stretchr/testify/require"
"github.com/tikv/client-go/v2/testutils"
)

func TestTxnUsageInfo(t *testing.T) {
t.Parallel()

store, clean := newMockStore(t)
store, clean := testkit.CreateMockStore(t)
defer clean()

t.Run("Used", func(t *testing.T) {
Expand Down Expand Up @@ -76,7 +72,7 @@ func TestTxnUsageInfo(t *testing.T) {
func TestTemporaryTable(t *testing.T) {
t.Parallel()

store, clean := newMockStore(t)
store, clean := testkit.CreateMockStore(t)
defer clean()

tk := testkit.NewTestKit(t, store)
Expand All @@ -92,24 +88,3 @@ func TestTemporaryTable(t *testing.T) {
require.NoError(t, err)
require.True(t, usage.TemporaryTable)
}

func newMockStore(t *testing.T) (store kv.Storage, clean func()) {
store, err := mockstore.NewMockStore(
mockstore.WithClusterInspector(func(c testutils.Cluster) {
mockstore.BootstrapWithSingleStore(c)
}),
mockstore.WithStoreType(mockstore.EmbedUnistore),
)
require.NoError(t, err)

dom, err := session.BootstrapSession(store)
require.NoError(t, err)

clean = func() {
dom.Close()
err := store.Close()
require.NoError(t, err)
}

return
}
6 changes: 5 additions & 1 deletion telemetry/data_window_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package telemetry_test

import (
Expand All @@ -21,7 +23,9 @@ import (
)

func TestBuiltinFunctionsUsage(t *testing.T) {
store, clean := newMockStore(t)
t.Parallel()

store, clean := testkit.CreateMockStore(t)
defer clean()

tk := testkit.NewTestKit(t, store)
Expand Down
54 changes: 54 additions & 0 deletions telemetry/telemetry_serial_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// Copyright 2021 PingCAP, 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,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package telemetry_test

import (
"runtime"
"testing"

"github.com/Jeffail/gabs/v2"
"github.com/pingcap/tidb/config"
"github.com/pingcap/tidb/session"
"github.com/pingcap/tidb/telemetry"
"github.com/pingcap/tidb/testkit"
"github.com/stretchr/testify/require"
"go.etcd.io/etcd/integration"
)

func TestReport(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("integration.NewClusterV3 will create file contains a colon which is not allowed on Windows")
}

etcdCluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1})
defer etcdCluster.Terminate(t)
store, clean := testkit.CreateMockStore(t)
defer clean()
se, err := session.CreateSession4Test(store)
require.NoError(t, err)
defer se.Close()

config.GetGlobalConfig().EnableTelemetry = false
require.NoError(t, telemetry.ReportUsageData(se, etcdCluster.RandClient()))

status, err := telemetry.GetTelemetryStatus(etcdCluster.RandClient())
require.NoError(t, err)

jsonParsed, err := gabs.ParseJSON([]byte(status))
require.NoError(t, err)
require.True(t, jsonParsed.Path("is_error").Data().(bool))
require.Equal(t, "telemetry is disabled", jsonParsed.Path("error_msg").Data().(string))
require.False(t, jsonParsed.Path("is_request_sent").Data().(bool))
}
99 changes: 20 additions & 79 deletions telemetry/telemetry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,9 @@ import (

"github.com/Jeffail/gabs/v2"
"github.com/pingcap/tidb/config"
"github.com/pingcap/tidb/domain"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/session"
"github.com/pingcap/tidb/store/mockstore"
"github.com/pingcap/tidb/telemetry"
"github.com/pingcap/tidb/testkit"
"github.com/stretchr/testify/require"
"go.etcd.io/etcd/integration"
)
Expand All @@ -37,18 +35,18 @@ func TestTrackingID(t *testing.T) {

t.Parallel()

s := newSuite(t)
defer s.close()
etcdCluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1})
defer etcdCluster.Terminate(t)

id, err := telemetry.GetTrackingID(s.etcdCluster.RandClient())
id, err := telemetry.GetTrackingID(etcdCluster.RandClient())
require.NoError(t, err)
require.Equal(t, "", id)

id2, err := telemetry.ResetTrackingID(s.etcdCluster.RandClient())
id2, err := telemetry.ResetTrackingID(etcdCluster.RandClient())
require.NoError(t, err)
require.NotEqual(t, "", id2)

id3, err := telemetry.GetTrackingID(s.etcdCluster.RandClient())
id3, err := telemetry.GetTrackingID(etcdCluster.RandClient())
require.NoError(t, err)
require.Equal(t, id2, id3)
}
Expand All @@ -58,19 +56,24 @@ func TestPreview(t *testing.T) {
t.Skip("integration.NewClusterV3 will create file contains a colon which is not allowed on Windows")
}

s := newSuite(t)
defer s.close()
etcdCluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1})
defer etcdCluster.Terminate(t)
store, clean := testkit.CreateMockStore(t)
defer clean()
se, err := session.CreateSession4Test(store)
require.NoError(t, err)
defer se.Close()

config.GetGlobalConfig().EnableTelemetry = false
r, err := telemetry.PreviewUsageData(s.se, s.etcdCluster.RandClient())
r, err := telemetry.PreviewUsageData(se, etcdCluster.RandClient())
require.NoError(t, err)
require.Equal(t, "", r)

trackingID, err := telemetry.ResetTrackingID(s.etcdCluster.RandClient())
trackingID, err := telemetry.ResetTrackingID(etcdCluster.RandClient())
require.NoError(t, err)

config.GetGlobalConfig().EnableTelemetry = true
r, err = telemetry.PreviewUsageData(s.se, s.etcdCluster.RandClient())
r, err = telemetry.PreviewUsageData(se, etcdCluster.RandClient())
require.NoError(t, err)

jsonParsed, err := gabs.ParseJSON([]byte(r))
Expand All @@ -86,79 +89,17 @@ func TestPreview(t *testing.T) {
require.Equal(t, "tikv", jsonParsed.Path("instances.1.instanceType").Data().(string))
require.True(t, jsonParsed.ExistsP("hardware"))

_, err = s.se.Execute(context.Background(), "SET @@global.tidb_enable_telemetry = 0")
_, err = se.Execute(context.Background(), "SET @@global.tidb_enable_telemetry = 0")
require.NoError(t, err)
r, err = telemetry.PreviewUsageData(s.se, s.etcdCluster.RandClient())
r, err = telemetry.PreviewUsageData(se, etcdCluster.RandClient())
require.NoError(t, err)
require.Equal(t, "", r)

_, err = s.se.Execute(context.Background(), "SET @@global.tidb_enable_telemetry = 1")
_, err = se.Execute(context.Background(), "SET @@global.tidb_enable_telemetry = 1")
config.GetGlobalConfig().EnableTelemetry = false
require.NoError(t, err)

r, err = telemetry.PreviewUsageData(s.se, s.etcdCluster.RandClient())
r, err = telemetry.PreviewUsageData(se, etcdCluster.RandClient())
require.NoError(t, err)
require.Equal(t, "", r)
}

func TestReport(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("integration.NewClusterV3 will create file contains a colon which is not allowed on Windows")
}

s := newSuite(t)
defer s.close()

config.GetGlobalConfig().EnableTelemetry = false
err := telemetry.ReportUsageData(s.se, s.etcdCluster.RandClient())
require.NoError(t, err)

status, err := telemetry.GetTelemetryStatus(s.etcdCluster.RandClient())
require.NoError(t, err)

jsonParsed, err := gabs.ParseJSON([]byte(status))
require.NoError(t, err)
require.True(t, jsonParsed.Path("is_error").Data().(bool))
require.Equal(t, "telemetry is disabled", jsonParsed.Path("error_msg").Data().(string))
require.False(t, jsonParsed.Path("is_request_sent").Data().(bool))
}

type testSuite struct {
store kv.Storage
dom *domain.Domain
etcdCluster *integration.ClusterV3
se session.Session
close func()
}

func newSuite(t *testing.T) *testSuite {
suite := new(testSuite)

store, err := mockstore.NewMockStore()
require.NoError(t, err)
suite.store = store

session.SetSchemaLease(0)
session.DisableStats4Test()

dom, err := session.BootstrapSession(store)
require.NoError(t, err)
suite.dom = dom

etcdCluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1})
suite.etcdCluster = etcdCluster

se, err := session.CreateSession4Test(store)
require.NoError(t, err)
suite.se = se

suite.close = func() {
suite.se.Close()
suite.etcdCluster.Terminate(t)
suite.dom.Close()
err = suite.store.Close()
require.NoError(t, err)
}

return suite
}

0 comments on commit e1216e5

Please sign in to comment.