delete_e2e_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. // +build e2e
  2. // Copyright 2020-2021 InfluxData, Inc. All rights reserved.
  3. // Use of this source code is governed by MIT
  4. // license that can be found in the LICENSE file.
  5. package api_test
  6. import (
  7. "context"
  8. "strconv"
  9. "strings"
  10. "testing"
  11. "time"
  12. influxdb2 "github.com/influxdata/influxdb-client-go/v2"
  13. "github.com/influxdata/influxdb-client-go/v2/api/write"
  14. "github.com/influxdata/influxdb-client-go/v2/domain"
  15. "github.com/stretchr/testify/assert"
  16. "github.com/stretchr/testify/require"
  17. )
  18. func TestDeleteAPI(t *testing.T) {
  19. ctx := context.Background()
  20. client := influxdb2.NewClient(serverURL, authToken)
  21. writeAPI := client.WriteAPIBlocking("my-org", "my-bucket")
  22. queryAPI := client.QueryAPI("my-org")
  23. tmStart := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)
  24. writeF := func(start time.Time, count int64) time.Time {
  25. tm := start
  26. for i, f := int64(0), 0.0; i < count; i++ {
  27. p := write.NewPoint("test",
  28. map[string]string{"a": strconv.FormatInt(i%2, 10), "b": "static"},
  29. map[string]interface{}{"f": f, "i": i},
  30. tm)
  31. err := writeAPI.WritePoint(ctx, p)
  32. require.NoError(t, err)
  33. f += 1.2
  34. tm = tm.Add(time.Minute)
  35. }
  36. return tm
  37. }
  38. countF := func(start, stop time.Time) int64 {
  39. result, err := queryAPI.Query(ctx, `from(bucket:"my-bucket")|> range(start: `+start.Format(time.RFC3339)+`, stop:`+stop.Format(time.RFC3339)+`)
  40. |> filter(fn: (r) => r._measurement == "test" and r._field == "f")
  41. |> drop(columns: ["a", "b"])
  42. |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
  43. |> count(column: "f")`)
  44. require.Nil(t, err, err)
  45. count := int64(0)
  46. if result.Next() {
  47. require.NotNil(t, result.Record().ValueByKey("f"))
  48. count = result.Record().ValueByKey("f").(int64)
  49. }
  50. return count
  51. }
  52. tmEnd := writeF(tmStart, 100)
  53. assert.Equal(t, int64(100), countF(tmStart, tmEnd))
  54. deleteAPI := client.DeleteAPI()
  55. org, err := client.OrganizationsAPI().FindOrganizationByName(ctx, "my-org")
  56. require.Nil(t, err, err)
  57. require.NotNil(t, org)
  58. bucket, err := client.BucketsAPI().FindBucketByName(ctx, "my-bucket")
  59. require.Nil(t, err, err)
  60. require.NotNil(t, bucket)
  61. err = deleteAPI.DeleteWithName(ctx, "my-org", "my-bucket", tmStart, tmEnd, "")
  62. require.Nil(t, err, err)
  63. assert.Equal(t, int64(0), countF(tmStart, tmEnd))
  64. tmEnd = writeF(tmStart, 100)
  65. assert.Equal(t, int64(100), countF(tmStart, tmEnd))
  66. err = deleteAPI.DeleteWithID(ctx, *org.Id, *bucket.Id, tmStart, tmEnd, "a=1")
  67. require.Nil(t, err, err)
  68. assert.Equal(t, int64(50), countF(tmStart, tmEnd))
  69. err = deleteAPI.Delete(ctx, org, bucket, tmStart.Add(50*time.Minute), tmEnd, "b=static")
  70. require.Nil(t, err, err)
  71. assert.Equal(t, int64(25), countF(tmStart, tmEnd))
  72. err = deleteAPI.DeleteWithName(ctx, "org", "my-bucket", tmStart.Add(50*time.Minute), tmEnd, "b=static")
  73. require.NotNil(t, err, err)
  74. assert.True(t, strings.Contains(err.Error(), "not found"))
  75. err = deleteAPI.DeleteWithName(ctx, "my-org", "bucket", tmStart.Add(50*time.Minute), tmEnd, "b=static")
  76. require.NotNil(t, err, err)
  77. assert.True(t, strings.Contains(err.Error(), "not found"))
  78. }
  79. func TestDeleteAPI_failing(t *testing.T) {
  80. ctx := context.Background()
  81. client := influxdb2.NewClient(serverURL, authToken)
  82. deleteAPI := client.DeleteAPI()
  83. invalidID := "xcv"
  84. notExistentID := "1000000000000000"
  85. tmStart := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)
  86. tmEnd := tmStart.Add(time.Second)
  87. err := deleteAPI.DeleteWithID(ctx, notExistentID, invalidID, tmStart, tmEnd, "a=1")
  88. assert.NotNil(t, err)
  89. err = deleteAPI.DeleteWithID(ctx, notExistentID, notExistentID, tmStart, tmEnd, "a=1")
  90. assert.NotNil(t, err)
  91. org, err := client.OrganizationsAPI().FindOrganizationByName(ctx, "my-org")
  92. assert.Nil(t, err, err)
  93. assert.NotNil(t, org)
  94. bucket, err := client.BucketsAPI().FindBucketByName(ctx, "my-bucket")
  95. assert.Nil(t, err, err)
  96. assert.NotNil(t, bucket)
  97. org, err = client.OrganizationsAPI().CreateOrganizationWithName(ctx, "org1")
  98. require.Nil(t, err)
  99. require.NotNil(t, org)
  100. permission := &domain.Permission{
  101. Action: domain.PermissionActionWrite,
  102. Resource: domain.Resource{
  103. Type: domain.ResourceTypeOrgs,
  104. },
  105. }
  106. permissions := []domain.Permission{*permission}
  107. //create authorization for new org
  108. auth, err := client.AuthorizationsAPI().CreateAuthorizationWithOrgID(context.Background(), *org.Id, permissions)
  109. require.Nil(t, err)
  110. require.NotNil(t, auth)
  111. // create client with new auth token without permission for buckets
  112. clientOrg2 := influxdb2.NewClient(serverURL, *auth.Token)
  113. // test 403
  114. err = clientOrg2.DeleteAPI().Delete(ctx, org, bucket, tmStart, tmStart.Add(50*time.Minute), "b=static")
  115. assert.NotNil(t, err)
  116. err = client.AuthorizationsAPI().DeleteAuthorization(ctx, auth)
  117. assert.Nil(t, err)
  118. err = client.OrganizationsAPI().DeleteOrganization(ctx, org)
  119. assert.Nil(t, err)
  120. }
  121. func TestDeleteAPI_requestFailing(t *testing.T) {
  122. ctx := context.Background()
  123. client := influxdb2.NewClient("serverURL", authToken)
  124. deleteAPI := client.DeleteAPI()
  125. anID := "1000000000000000"
  126. err := deleteAPI.DeleteWithName(ctx, anID, anID, time.Now(), time.Now(), "")
  127. assert.NotNil(t, err)
  128. }