1// +build e2e
2
3// Copyright 2020-2021 InfluxData, Inc. All rights reserved.
4// Use of this source code is governed by MIT
5// license that can be found in the LICENSE file.
6
7package api_test
8
9import (
10	"context"
11	"testing"
12
13	influxdb2 "github.com/influxdata/influxdb-client-go/v2"
14	"github.com/influxdata/influxdb-client-go/v2/domain"
15	"github.com/stretchr/testify/assert"
16	"github.com/stretchr/testify/require"
17)
18
19func TestLabelsAPI(t *testing.T) {
20	client := influxdb2.NewClientWithOptions(serverURL, authToken, influxdb2.DefaultOptions().SetLogLevel(3))
21	labelsAPI := client.LabelsAPI()
22	orgAPI := client.OrganizationsAPI()
23
24	ctx := context.Background()
25
26	myorg, err := orgAPI.FindOrganizationByName(ctx, "my-org")
27	require.Nil(t, err, err)
28	require.NotNil(t, myorg)
29
30	labels, err := labelsAPI.GetLabels(ctx)
31	require.Nil(t, err, err)
32	require.NotNil(t, labels)
33	assert.Len(t, *labels, 0)
34
35	labelName := "Active State"
36	props := map[string]string{"color": "#33ffddd", "description": "Marks org active"}
37	label, err := labelsAPI.CreateLabelWithName(ctx, myorg, labelName, props)
38	require.Nil(t, err, err)
39	require.NotNil(t, label)
40	assert.Equal(t, labelName, *label.Name)
41	require.NotNil(t, label.Properties)
42	assert.Equal(t, props, label.Properties.AdditionalProperties)
43
44	//remove properties
45	label.Properties.AdditionalProperties = map[string]string{"color": "", "description": ""}
46	label2, err := labelsAPI.UpdateLabel(ctx, label)
47	require.Nil(t, err, err)
48	require.NotNil(t, label2)
49	assert.Equal(t, labelName, *label2.Name)
50	assert.Nil(t, label2.Properties)
51
52	label2, err = labelsAPI.FindLabelByID(ctx, *label.Id)
53	require.Nil(t, err, err)
54	require.NotNil(t, label2)
55	assert.Equal(t, labelName, *label2.Name)
56
57	label2, err = labelsAPI.FindLabelByName(ctx, *myorg.Id, labelName)
58	require.Nil(t, err, err)
59	require.NotNil(t, label2)
60	assert.Equal(t, labelName, *label2.Name)
61
62	label2, err = labelsAPI.FindLabelByName(ctx, *myorg.Id, "wrong label")
63	assert.NotNil(t, err, err)
64	assert.Nil(t, label2)
65
66	labels, err = labelsAPI.GetLabels(ctx)
67	require.Nil(t, err, err)
68	require.NotNil(t, labels)
69	assert.Len(t, *labels, 1)
70
71	labels, err = labelsAPI.FindLabelsByOrg(ctx, myorg)
72	require.Nil(t, err, err)
73	require.NotNil(t, labels)
74	assert.Len(t, *labels, 1)
75
76	labels, err = labelsAPI.FindLabelsByOrgID(ctx, *myorg.Id)
77	require.Nil(t, err, err)
78	require.NotNil(t, labels)
79	assert.Len(t, *labels, 1)
80
81	// duplicate label
82	label2, err = labelsAPI.CreateLabelWithName(ctx, myorg, labelName, nil)
83	assert.NotNil(t, err)
84	assert.Nil(t, label2)
85
86	err = labelsAPI.DeleteLabel(ctx, label)
87	require.Nil(t, err, err)
88	//
89	err = labelsAPI.DeleteLabel(ctx, label)
90	assert.NotNil(t, err, err)
91}
92
93func TestLabelsAPI_failing(t *testing.T) {
94	client := influxdb2.NewClient(serverURL, authToken)
95	clientUnAuth := influxdb2.NewClient(serverURL, "invalid_token")
96	labelsAPI := client.LabelsAPI()
97	orgAPI := client.OrganizationsAPI()
98	ctx := context.Background()
99
100	invalidID := "xyz"
101	wrongID := "1000000000000000"
102
103	var label = &domain.Label{
104		Id: &wrongID,
105	}
106
107	org, err := orgAPI.FindOrganizationByName(ctx, "my-org")
108	require.Nil(t, err, err)
109	require.NotNil(t, org)
110
111	label, err = labelsAPI.UpdateLabel(ctx, label)
112	assert.NotNil(t, err)
113	assert.Nil(t, label)
114
115	label, err = labelsAPI.FindLabelByID(ctx, wrongID)
116	assert.NotNil(t, err)
117	assert.Nil(t, label)
118
119	labels, err := clientUnAuth.LabelsAPI().FindLabelsByOrgID(ctx, invalidID)
120	assert.NotNil(t, err)
121	assert.Nil(t, labels)
122
123	err = labelsAPI.DeleteLabelWithID(ctx, invalidID)
124	assert.NotNil(t, err)
125}
126
127func TestLabelsAPI_requestFailing(t *testing.T) {
128	client := influxdb2.NewClient("serverURL", authToken)
129	labelsAPI := client.LabelsAPI()
130	ctx := context.Background()
131
132	anID := "1000000000000000"
133
134	label := &domain.Label{Id: &anID}
135
136	_, err := labelsAPI.GetLabels(ctx)
137	assert.NotNil(t, err)
138
139	_, err = labelsAPI.FindLabelByName(ctx, anID, "name")
140	assert.NotNil(t, err)
141
142	_, err = labelsAPI.FindLabelByID(ctx, anID)
143	assert.NotNil(t, err)
144
145	_, err = labelsAPI.CreateLabelWithNameWithID(ctx, anID, "name", nil)
146	assert.NotNil(t, err)
147
148	_, err = labelsAPI.UpdateLabel(ctx, label)
149	assert.NotNil(t, err)
150
151	err = labelsAPI.DeleteLabel(ctx, label)
152	assert.NotNil(t, err)
153}
154