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  }