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