github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/gcplog/target_test.go (about) 1 package gcplog 2 3 import ( 4 "fmt" 5 "os" 6 "reflect" 7 "testing" 8 9 "github.com/go-kit/log" 10 "github.com/prometheus/client_golang/prometheus" 11 "github.com/prometheus/prometheus/model/relabel" 12 "github.com/stretchr/testify/assert" 13 14 "github.com/grafana/loki/clients/pkg/promtail/api" 15 "github.com/grafana/loki/clients/pkg/promtail/client/fake" 16 "github.com/grafana/loki/clients/pkg/promtail/scrapeconfig" 17 ) 18 19 func TestNewGCPLogTarget(t *testing.T) { 20 w := log.NewSyncWriter(os.Stderr) 21 logger := log.NewLogfmtLogger(w) 22 23 // Create fake promtail client 24 eh := fake.New(func() {}) 25 defer eh.Stop() 26 27 type args struct { 28 metrics *Metrics 29 logger log.Logger 30 handler api.EntryHandler 31 relabel []*relabel.Config 32 jobName string 33 config *scrapeconfig.GcplogTargetConfig 34 } 35 tests := []struct { 36 name string 37 args args 38 wantType interface{} 39 wantErr assert.ErrorAssertionFunc 40 }{ 41 { 42 name: "defaults to pull target", 43 args: args{ 44 metrics: NewMetrics(prometheus.NewRegistry()), 45 logger: logger, 46 handler: eh, 47 relabel: nil, 48 jobName: "test_job", 49 config: &scrapeconfig.GcplogTargetConfig{ 50 SubscriptionType: "", 51 }, 52 }, 53 wantType: &pullTarget{}, 54 wantErr: assert.NoError, 55 }, 56 { 57 name: "pull SubscriptionType creates new pull target", 58 args: args{ 59 metrics: NewMetrics(prometheus.NewRegistry()), 60 logger: logger, 61 handler: eh, 62 relabel: nil, 63 jobName: "test_job", 64 config: &scrapeconfig.GcplogTargetConfig{ 65 SubscriptionType: "pull", 66 }, 67 }, 68 wantType: &pullTarget{}, 69 wantErr: assert.NoError, 70 }, 71 { 72 name: "push SubscriptionType creates new pull target", 73 args: args{ 74 metrics: NewMetrics(prometheus.NewRegistry()), 75 logger: logger, 76 handler: eh, 77 relabel: nil, 78 jobName: "test_job", 79 config: &scrapeconfig.GcplogTargetConfig{ 80 SubscriptionType: "push", 81 }, 82 }, 83 wantType: &pushTarget{}, 84 wantErr: assert.NoError, 85 }, 86 { 87 name: "unknown subscription type fails to create target", 88 args: args{ 89 metrics: NewMetrics(prometheus.NewRegistry()), 90 logger: logger, 91 handler: eh, 92 relabel: nil, 93 jobName: "test_job", 94 config: &scrapeconfig.GcplogTargetConfig{ 95 SubscriptionType: "magic", 96 }, 97 }, 98 wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { 99 return assert.ErrorContains(t, err, "invalid subscription type: magic", i...) 100 }, 101 }, 102 } 103 for _, tt := range tests { 104 t.Run(tt.name, func(t *testing.T) { 105 // Since the push target underlying http server registers metrics in the default registerer, we have to override it to prevent duplicate metrics errors. 106 prometheus.DefaultRegisterer = prometheus.NewRegistry() 107 108 got, err := NewGCPLogTarget(tt.args.metrics, tt.args.logger, tt.args.handler, tt.args.relabel, tt.args.jobName, tt.args.config) 109 // If the target was started, stop it after test 110 if got != nil { 111 defer func() { _ = got.Stop() }() 112 } 113 114 if !tt.wantErr(t, err, fmt.Sprintf("NewGCPLogTarget(%v, %v, %v, %v, %v, %v)", tt.args.metrics, tt.args.logger, tt.args.handler, tt.args.relabel, tt.args.jobName, tt.args.config)) { 115 return 116 } 117 if err == nil { 118 assert.IsType(t, tt.wantType, got, "created target type different than expected: Got: %s", reflect.TypeOf(got).Name()) 119 } 120 }) 121 } 122 }