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  }