123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- package dao
- import (
- "context"
- "flag"
- "fmt"
- "log"
- "os"
- "strconv"
- "testing"
- "time"
- . "github.com/smartystreets/goconvey/convey"
- "go-common/app/service/main/dapper-query/conf"
- "golang.org/x/sys/unix"
- )
- var cfg *conf.Config
- var flagMap = map[string]string{
- "app_id": "main.common-arch.dapper-query",
- "conf_appid": "main.common-arch.dapper-query",
- "conf_token": "ed3241c850735df94d24d7b49f69ddd7",
- "tree_id": "60617",
- "conf_version": "docker-1",
- "deploy_env": "uat",
- "conf_env": "uat",
- "conf_host": "config.bilibili.co",
- "conf_path": os.TempDir(),
- "region": "sh",
- "zone": "sh001",
- }
- // only for ut runner
- func hackHosts() {
- hostsPath := "/etc/hosts"
- if unix.Access(hostsPath, unix.W_OK) != nil {
- return
- }
- fp, err := os.OpenFile(hostsPath, os.O_WRONLY, 0644)
- if err != nil {
- log.Printf("open hosts file error: %s", err)
- }
- defer fp.Close()
- fmt.Fprintf(fp, "\n")
- fmt.Fprintln(fp, "172.22.33.146 nvm-test-dapper-influxdb-01")
- }
- func TestMain(m *testing.M) {
- hackHosts()
- for key, val := range flagMap {
- flag.Set(key, val)
- }
- flag.Parse()
- if err := conf.Init(); err != nil {
- log.Printf("init config from remote error: %s", err)
- }
- if hbaseAddrs := os.Getenv("TEST_HBASE_ADDRS"); hbaseAddrs != "" {
- cfg = new(conf.Config)
- cfg.HBase = &conf.HBaseConfig{Addrs: hbaseAddrs, Namespace: "ugc"}
- if influxdbAddr := os.Getenv("TEST_INFLUXDB_ADDR"); influxdbAddr != "" {
- cfg.InfluxDB = &conf.InfluxDBConfig{Addr: influxdbAddr, Database: "dapper_uat"}
- }
- }
- if cfg == nil {
- cfg = conf.Conf
- if cfg.InfluxDB != nil {
- cfg.InfluxDB.Database = "dapper_uat"
- }
- }
- os.Exit(m.Run())
- }
- func TestDao(t *testing.T) {
- if cfg == nil {
- t.Skipf("no config provide skipped")
- }
- daoImpl, err := New(cfg)
- if err != nil {
- t.Fatalf("new dao error: %s", err)
- }
- ctx := context.Background()
- serviceName := "main.community.tag"
- operationName := "/x/internal/tag/archive/tags"
- Convey("query serviceNames", t, func() {
- serviceNames, err := daoImpl.ServiceNames(ctx)
- So(err, ShouldBeNil)
- So(serviceNames, ShouldNotBeEmpty)
- t.Logf("serviceNames: %v", serviceNames)
- Convey("query operationNames", func() {
- // FIXME: make mock data frist
- operationNames, err := daoImpl.OperationNames(ctx, serviceName)
- So(err, ShouldBeNil)
- So(operationNames, ShouldNotBeEmpty)
- t.Logf("operationNames for %s :%v", serviceName, operationNames)
- })
- })
- Convey("test QuerySpanListTime Asc", t, func() {
- // FIXME: make mock data frist
- spanListRefs, err := daoImpl.QuerySpanList(ctx, serviceName, operationName, &Selector{
- Start: time.Now().Unix() - 3600,
- End: time.Now().Unix(),
- Limit: 10,
- Offset: 10,
- }, TimeAsc)
- So(err, ShouldBeNil)
- So(spanListRefs, ShouldNotBeEmpty)
- t.Logf("spanListRefs: %v", spanListRefs)
- })
- Convey("test QuerySpanListTime Desc", t, func() {
- // FIXME: make mock data frist
- spanListRefs, err := daoImpl.QuerySpanList(ctx, serviceName, operationName, &Selector{
- Start: time.Now().Unix() - 3600*12,
- End: time.Now().Unix(),
- Limit: 10,
- Offset: 10,
- }, TimeDesc)
- So(err, ShouldBeNil)
- So(spanListRefs, ShouldNotBeEmpty)
- t.Logf("spanListRefs: %v", spanListRefs)
- Convey("test get trace", func() {
- spanListRef := spanListRefs[0]
- spans, err := daoImpl.Trace(ctx, spanListRef.TraceID)
- So(err, ShouldBeNil)
- So(spans, ShouldNotBeEmpty)
- t.Logf("spans %v", spans)
- })
- })
- Convey("test QuerySpanListDuration Desc", t, func() {
- // FIXME: make mock data frist
- spanListRefs, err := daoImpl.QuerySpanList(ctx, serviceName, operationName, &Selector{
- Start: time.Now().Unix() - 3600*12,
- End: time.Now().Unix(),
- Limit: 10,
- Offset: 10,
- }, DurationDesc)
- So(err, ShouldBeNil)
- So(spanListRefs, ShouldNotBeEmpty)
- t.Logf("spanListRefs: %v", spanListRefs)
- Convey("test get trace", func() {
- spanListRef := spanListRefs[len(spanListRefs)-1]
- spans, err := daoImpl.Trace(ctx, spanListRef.TraceID)
- So(err, ShouldBeNil)
- So(spans, ShouldNotBeEmpty)
- t.Logf("spans %v", spans)
- })
- })
- Convey("test QuerySpanListDuration Asc", t, func() {
- // FIXME: make mock data frist
- spanListRefs, err := daoImpl.QuerySpanList(ctx, serviceName, operationName, &Selector{
- Start: time.Now().Unix() - 3600*12,
- End: time.Now().Unix(),
- Limit: 10,
- Offset: 10,
- }, DurationAsc)
- So(err, ShouldBeNil)
- So(spanListRefs, ShouldNotBeEmpty)
- t.Logf("spanListRefs: %v", spanListRefs)
- Convey("test get trace", func() {
- spanListRef := spanListRefs[len(spanListRefs)-1]
- spans, err := daoImpl.Trace(ctx, spanListRef.TraceID)
- So(err, ShouldBeNil)
- So(spans, ShouldNotBeEmpty)
- t.Logf("spans %v", spans)
- })
- })
- Convey("test MeanOperationNameField", t, func() {
- start := time.Now().Unix() - 3600
- end := time.Now().Unix()
- values, err := daoImpl.MeanOperationNameField(ctx, map[string]string{"service_name": serviceName}, "max_duration", start, end, []string{"operation_name"})
- if err != nil {
- t.Error(err)
- }
- So(values, ShouldNotBeEmpty)
- })
- Convey("test SpanSeriesMean", t, func() {
- start := time.Now().Unix() - 3600
- end := time.Now().Unix()
- series, err := daoImpl.SpanSeriesMean(ctx, serviceName, operationName, []string{"max_duration", "min_duration"}, start, end, 30)
- if err != nil {
- t.Error(err)
- }
- So(series.Timestamps, ShouldNotBeEmpty)
- So(series.Items, ShouldNotBeEmpty)
- // FIXME
- //for _, item := range series.Items {
- // So(len(series.Timestamps), ShouldEqual, len(item.Rows))
- //}
- t.Logf("%#v\n", series)
- })
- Convey("test SpanSeriesCount", t, func() {
- start := time.Now().Unix() - 3600
- end := time.Now().Unix()
- series, err := daoImpl.SpanSeriesCount(ctx, serviceName, operationName, []string{"max_duration", "min_duration"}, start, end, 30)
- if err != nil {
- t.Error(err)
- }
- So(series.Timestamps, ShouldNotBeEmpty)
- So(series.Items, ShouldNotBeEmpty)
- // FIXME
- //for _, item := range series.Items {
- // So(len(series.Timestamps), ShouldEqual, len(item.Rows))
- //}
- t.Logf("%#v\n", series)
- })
- Convey("test PeerService", t, func() {
- serviceName := "main.bangumi.season-service"
- peerServices, err := daoImpl.PeerService(ctx, serviceName)
- if err != nil {
- t.Error(err)
- }
- So(peerServices, ShouldNotBeEmpty)
- })
- Convey("test trace", t, func() {
- traceID, _ := strconv.ParseUint("100056da7886666c", 16, 64)
- spans, err := daoImpl.Trace(ctx, traceID)
- if err != nil {
- t.Error(err)
- }
- So(spans, ShouldNotBeEmpty)
- })
- Convey("test ping close", t, func() {
- So(daoImpl.Ping(ctx), ShouldBeNil)
- So(daoImpl.Close(ctx), ShouldBeNil)
- })
- }
|