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