You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

140 lines
4.2 KiB

// Copyright 2020 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,
// See the License for the specific language governing permissions and
// limitations under the License.
package telemetry_test
import (
"context"
"testing"
"github.com/Jeffail/gabs/v2"
. "github.com/pingcap/check"
"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"
"go.etcd.io/etcd/integration"
)
var _ = Suite(&testSuite{})
type testSuite struct {
store kv.Storage
dom *domain.Domain
etcdCluster *integration.ClusterV3
se session.Session
}
var telemetryTestT *testing.T
func TestT(t *testing.T) {
telemetryTestT = t
TestingT(t)
}
func (s *testSuite) SetUpSuite(c *C) {
store, err := mockstore.NewMockTikvStore()
c.Assert(err, IsNil)
session.SetSchemaLease(0)
session.DisableStats4Test()
dom, err := session.BootstrapSession(store)
c.Assert(err, IsNil)
etcdCluster := integration.NewClusterV3(telemetryTestT, &integration.ClusterConfig{Size: 1})
se, err := session.CreateSession4Test(store)
c.Assert(err, IsNil)
s.store = store
s.dom = dom
s.etcdCluster = etcdCluster
s.se = se
}
func (s *testSuite) TearDownSuite(c *C) {
s.se.Close()
s.etcdCluster.Terminate(telemetryTestT)
s.dom.Close()
s.store.Close()
}
func (s *testSuite) Test01TrackingID(c *C) {
id, err := telemetry.GetTrackingID(s.etcdCluster.RandClient())
c.Assert(err, IsNil)
c.Assert(id, Equals, "")
id2, err := telemetry.ResetTrackingID(s.etcdCluster.RandClient())
c.Assert(err, IsNil)
c.Assert(id2 != "", Equals, true)
id3, err := telemetry.GetTrackingID(s.etcdCluster.RandClient())
c.Assert(err, IsNil)
c.Assert(id3, Equals, id2)
}
func (s *testSuite) Test02Preview(c *C) {
config.GetGlobalConfig().EnableTelemetry = false
r, err := telemetry.PreviewUsageData(s.se, s.etcdCluster.RandClient())
c.Assert(err, IsNil)
c.Assert(r, Equals, "")
trackingID, err := telemetry.ResetTrackingID(s.etcdCluster.RandClient())
c.Assert(err, IsNil)
config.GetGlobalConfig().EnableTelemetry = true
r, err = telemetry.PreviewUsageData(s.se, s.etcdCluster.RandClient())
c.Assert(err, IsNil)
jsonParsed, err := gabs.ParseJSON([]byte(r))
c.Assert(err, IsNil)
c.Assert(jsonParsed.Path("trackingId").Data().(string), Equals, trackingID)
c.Assert(jsonParsed.ExistsP("hostExtra.cpuFlags"), Equals, true)
c.Assert(jsonParsed.ExistsP("hostExtra.os"), Equals, true)
c.Assert(jsonParsed.Path("instances").Children(), HasLen, 2)
c.Assert(jsonParsed.Path("instances.0.instanceType").Data().(string), Equals, "tidb")
c.Assert(jsonParsed.Path("instances.1.instanceType").Data().(string), Equals, "tikv") // mocktikv
c.Assert(jsonParsed.ExistsP("hardware"), Equals, true)
_, err = s.se.Execute(context.Background(), "SET @@global.tidb_enable_telemetry = 0")
c.Assert(err, IsNil)
r, err = telemetry.PreviewUsageData(s.se, s.etcdCluster.RandClient())
c.Assert(err, IsNil)
c.Assert(r, Equals, "")
_, err = s.se.Execute(context.Background(), "SET @@global.tidb_enable_telemetry = 1")
config.GetGlobalConfig().EnableTelemetry = false
c.Assert(err, IsNil)
r, err = telemetry.PreviewUsageData(s.se, s.etcdCluster.RandClient())
c.Assert(err, IsNil)
c.Assert(r, Equals, "")
}
func (s *testSuite) Test03Report(c *C) {
config.GetGlobalConfig().EnableTelemetry = false
err := telemetry.ReportUsageData(s.se, s.etcdCluster.RandClient())
c.Assert(err, IsNil)
status, err := telemetry.GetTelemetryStatus(s.etcdCluster.RandClient())
c.Assert(err, IsNil)
jsonParsed, err := gabs.ParseJSON([]byte(status))
c.Assert(err, IsNil)
c.Assert(jsonParsed.Path("is_error").Data().(bool), Equals, true)
c.Assert(jsonParsed.Path("error_msg").Data().(string), Equals, "telemetry is disabled")
c.Assert(jsonParsed.Path("is_request_sent").Data().(bool), Equals, false)
}