/acceptance/openstack/messaging/v2/messaging.go

https://github.com/gophercloud/gophercloud · Go · 173 lines · 140 code · 33 blank · 0 comment · 24 complexity · 785cdee18d539c802abd5058643accd3 MD5 · raw file

  1. package v2
  2. import (
  3. "strings"
  4. "testing"
  5. "github.com/gophercloud/gophercloud"
  6. "github.com/gophercloud/gophercloud/acceptance/tools"
  7. "github.com/gophercloud/gophercloud/openstack/messaging/v2/claims"
  8. "github.com/gophercloud/gophercloud/openstack/messaging/v2/messages"
  9. "github.com/gophercloud/gophercloud/openstack/messaging/v2/queues"
  10. "github.com/gophercloud/gophercloud/pagination"
  11. )
  12. func CreateQueue(t *testing.T, client *gophercloud.ServiceClient) (string, error) {
  13. queueName := tools.RandomString("ACPTTEST", 5)
  14. t.Logf("Attempting to create Queue: %s", queueName)
  15. createOpts := queues.CreateOpts{
  16. QueueName: queueName,
  17. MaxMessagesPostSize: 262143,
  18. DefaultMessageTTL: 3700,
  19. DefaultMessageDelay: 25,
  20. DeadLetterQueueMessagesTTL: 3500,
  21. MaxClaimCount: 10,
  22. Extra: map[string]interface{}{"description": "Test Queue for Gophercloud acceptance tests."},
  23. }
  24. createErr := queues.Create(client, createOpts).ExtractErr()
  25. if createErr != nil {
  26. t.Fatalf("Unable to create Queue: %v", createErr)
  27. }
  28. GetQueue(t, client, queueName)
  29. t.Logf("Created Queue: %s", queueName)
  30. return queueName, nil
  31. }
  32. func DeleteQueue(t *testing.T, client *gophercloud.ServiceClient, queueName string) {
  33. t.Logf("Attempting to delete Queue: %s", queueName)
  34. err := queues.Delete(client, queueName).ExtractErr()
  35. if err != nil {
  36. t.Fatalf("Unable to delete Queue %s: %v", queueName, err)
  37. }
  38. t.Logf("Deleted Queue: %s", queueName)
  39. }
  40. func GetQueue(t *testing.T, client *gophercloud.ServiceClient, queueName string) (queues.QueueDetails, error) {
  41. t.Logf("Attempting to get Queue: %s", queueName)
  42. queue, err := queues.Get(client, queueName).Extract()
  43. if err != nil {
  44. t.Fatalf("Unable to get Queue %s: %v", queueName, err)
  45. }
  46. return queue, nil
  47. }
  48. func CreateShare(t *testing.T, client *gophercloud.ServiceClient, queueName string) (queues.QueueShare, error) {
  49. t.Logf("Attempting to create share for queue: %s", queueName)
  50. shareOpts := queues.ShareOpts{
  51. Paths: []queues.SharePath{queues.PathMessages},
  52. Methods: []queues.ShareMethod{queues.MethodPost},
  53. }
  54. share, err := queues.Share(client, queueName, shareOpts).Extract()
  55. return share, err
  56. }
  57. func CreateMessage(t *testing.T, client *gophercloud.ServiceClient, queueName string) (messages.ResourceList, error) {
  58. t.Logf("Attempting to add message to Queue: %s", queueName)
  59. createOpts := messages.BatchCreateOpts{
  60. messages.CreateOpts{
  61. TTL: 300,
  62. Body: map[string]interface{}{"Key": tools.RandomString("ACPTTEST", 8)},
  63. },
  64. }
  65. resource, err := messages.Create(client, queueName, createOpts).Extract()
  66. if err != nil {
  67. t.Fatalf("Unable to add message to queue %s: %v", queueName, err)
  68. } else {
  69. t.Logf("Successfully added message to queue: %s", queueName)
  70. }
  71. return resource, err
  72. }
  73. func ListMessages(t *testing.T, client *gophercloud.ServiceClient, queueName string) ([]messages.Message, error) {
  74. listOpts := messages.ListOpts{}
  75. var allMessages []messages.Message
  76. var listErr error
  77. t.Logf("Attempting to list messages on queue: %s", queueName)
  78. pager := messages.List(client, queueName, listOpts)
  79. err := pager.EachPage(func(page pagination.Page) (bool, error) {
  80. allMessages, listErr = messages.ExtractMessages(page)
  81. if listErr != nil {
  82. t.Fatalf("Unable to extract messages: %v", listErr)
  83. }
  84. for _, message := range allMessages {
  85. tools.PrintResource(t, message)
  86. }
  87. return true, nil
  88. })
  89. return allMessages, err
  90. }
  91. func CreateClaim(t *testing.T, client *gophercloud.ServiceClient, queueName string) ([]claims.Messages, error) {
  92. createOpts := claims.CreateOpts{}
  93. t.Logf("Attempting to create claim on queue: %s", queueName)
  94. claimedMessages, err := claims.Create(client, queueName, createOpts).Extract()
  95. tools.PrintResource(t, claimedMessages)
  96. if err != nil {
  97. t.Fatalf("Unable to create claim: %v", err)
  98. }
  99. return claimedMessages, err
  100. }
  101. func GetClaim(t *testing.T, client *gophercloud.ServiceClient, queueName string, claimID string) (*claims.Claim, error) {
  102. t.Logf("Attempting to get claim: %s", claimID)
  103. claim, err := claims.Get(client, queueName, claimID).Extract()
  104. if err != nil {
  105. t.Fatalf("Unable to get claim: %s", claimID)
  106. }
  107. return claim, err
  108. }
  109. func DeleteClaim(t *testing.T, client *gophercloud.ServiceClient, queueName string, claimID string) error {
  110. t.Logf("Attempting to delete claim: %s", claimID)
  111. err := claims.Delete(client, queueName, claimID).ExtractErr()
  112. if err != nil {
  113. t.Fatalf("Unable to delete claim: %s", claimID)
  114. }
  115. t.Logf("Sucessfully deleted claim: %s", claimID)
  116. return err
  117. }
  118. func ExtractIDs(claim []claims.Messages) ([]string, []string) {
  119. var claimIDs []string
  120. var messageID []string
  121. for _, msg := range claim {
  122. parts := strings.Split(msg.Href, "?claim_id=")
  123. if len(parts) == 2 {
  124. pieces := strings.Split(parts[0], "/")
  125. if len(pieces) > 0 {
  126. messageID = append(messageID, pieces[len(pieces)-1])
  127. }
  128. claimIDs = append(claimIDs, parts[1])
  129. }
  130. }
  131. encountered := map[string]bool{}
  132. for v := range claimIDs {
  133. encountered[claimIDs[v]] = true
  134. }
  135. var uniqueClaimIDs []string
  136. for key := range encountered {
  137. uniqueClaimIDs = append(uniqueClaimIDs, key)
  138. }
  139. return uniqueClaimIDs, messageID
  140. }