Skip to content

Commit

Permalink
Add GetQueueUrlV1 for JSON support
Browse files Browse the repository at this point in the history
  • Loading branch information
Dai.Otsuka authored and Dai.Otsuka committed Jun 7, 2024
1 parent a8265c1 commit 1ef3441
Show file tree
Hide file tree
Showing 9 changed files with 308 additions and 36 deletions.
38 changes: 38 additions & 0 deletions app/gosqs/get_queue_url.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package gosqs

import (
"net/http"

"github.com/Admiral-Piett/goaws/app"
"github.com/Admiral-Piett/goaws/app/interfaces"
"github.com/Admiral-Piett/goaws/app/models"
"github.com/Admiral-Piett/goaws/app/utils"
log "github.com/sirupsen/logrus"
)

func GetQueueUrlV1(req *http.Request) (int, interfaces.AbstractResponseBody) {

requestBody := models.NewGetQueueUrlRequest()
ok := utils.REQUEST_TRANSFORMER(requestBody, req, false)
if !ok {
log.Error("Invalid Request - GetQueueUrlV1")
return createErrorResponseV1(ErrInvalidParameterValue.Type)
}

queueName := requestBody.QueueName
if _, ok := app.SyncQueues.Queues[queueName]; !ok {
log.Error("Get Queue URL:", queueName, ", queue does not exist!!!")
return createErrorResponseV1("QueueNotFound")
}

queue := app.SyncQueues.Queues[queueName]
log.Debug("Get Queue URL:", queue.Name)

result := models.GetQueueUrlResult{QueueUrl: queue.URL}
respStruct := models.GetQueueUrlResponse{
Xmlns: models.BASE_XMLNS,
Result: result,
Metadata: models.BASE_RESPONSE_METADATA,
}
return http.StatusOK, respStruct
}
102 changes: 102 additions & 0 deletions app/gosqs/get_queue_url_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package gosqs

import (
"fmt"
"net/http"
"testing"

"github.com/Admiral-Piett/goaws/app/conf"
"github.com/Admiral-Piett/goaws/app/fixtures"
"github.com/Admiral-Piett/goaws/app/interfaces"
"github.com/Admiral-Piett/goaws/app/models"
"github.com/Admiral-Piett/goaws/app/utils"
"github.com/stretchr/testify/assert"
)

func TestGetQueueUrlV1_success(t *testing.T) {
conf.LoadYamlConfig("../conf/mock-data/mock-config.yaml", "BaseUnitTests")

defer func() {
utils.ResetApp()
utils.REQUEST_TRANSFORMER = utils.TransformRequest
}()

utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
v := resultingStruct.(*models.GetQueueUrlRequest)
*v = models.GetQueueUrlRequest{
QueueName: "unit-queue1",
QueueOwnerAWSAccountId: "fugafuga",
}
return true
}

_, r := utils.GenerateRequestInfo(
"POST",
"/",
nil,
true)
code, response := GetQueueUrlV1(r)

get_queue_url_response := response.(models.GetQueueUrlResponse)

assert.Equal(t, http.StatusOK, code)
assert.Contains(t, get_queue_url_response.Result.QueueUrl, fmt.Sprintf("%s/%s", fixtures.BASE_URL, "unit-queue1"))

}

func TestGetQueueUrlV1_error_no_queue(t *testing.T) {

conf.LoadYamlConfig("../conf/mock-data/mock-config.yaml", "BaseUnitTests")

defer func() {
utils.ResetApp()
utils.REQUEST_TRANSFORMER = utils.TransformRequest
}()

utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
v := resultingStruct.(*models.GetQueueUrlRequest)
*v = models.GetQueueUrlRequest{
QueueName: "not-exist-unit-queue1",
QueueOwnerAWSAccountId: "fugafuga",
}
return true
}

_, r := utils.GenerateRequestInfo(
"POST",
"/",
nil,
true)
code, response := GetQueueUrlV1(r)

expected := models.ErrorResult{
Type: "Not Found",
Code: "AWS.SimpleQueueService.NonExistentQueue",
Message: "The specified queue does not exist for this wsdl version.",
}

assert.Equal(t, http.StatusBadRequest, code)
assert.Equal(t, response.GetResult().(models.ErrorResult), expected)
}

func TestGetQueueUrlV1_error_request_transformer(t *testing.T) {

conf.LoadYamlConfig("../conf/mock-data/mock-config.yaml", "BaseUnitTests")

defer func() {
utils.ResetApp()
utils.REQUEST_TRANSFORMER = utils.TransformRequest
}()

utils.REQUEST_TRANSFORMER = func(resultingStruct interfaces.AbstractRequestBody, req *http.Request, emptyRequestValid bool) (success bool) {
return false
}

_, r := utils.GenerateRequestInfo(
"POST",
"/",
nil,
true)
code, _ := GetQueueUrlV1(r)
assert.Equal(t, http.StatusBadRequest, code)
}
23 changes: 0 additions & 23 deletions app/gosqs/gosqs.go
Original file line number Diff line number Diff line change
Expand Up @@ -362,29 +362,6 @@ func DeleteQueue(w http.ResponseWriter, req *http.Request) {
}
}

func GetQueueUrl(w http.ResponseWriter, req *http.Request) {
// Sent response type
w.Header().Set("Content-Type", "application/xml")
//
//// Retrieve FormValues required
queueName := req.FormValue("QueueName")
if queue, ok := app.SyncQueues.Queues[queueName]; ok {
url := queue.URL
log.Println("Get Queue URL:", queueName)
// Create, encode/xml and send response
result := app.GetQueueUrlResult{QueueUrl: url}
respStruct := app.GetQueueUrlResponse{"http://queue.amazonaws.com/doc/2012-11-05/", result, app.ResponseMetadata{RequestId: "00000000-0000-0000-0000-000000000000"}}
enc := xml.NewEncoder(w)
enc.Indent(" ", " ")
if err := enc.Encode(respStruct); err != nil {
log.Printf("error: %v\n", err)
}
} else {
log.Println("Get Queue URL:", queueName, ", queue does not exist!!!")
createErrorResponse(w, req, "QueueNotFound")
}
}

func getQueueFromPath(formVal string, theUrl string) string {
if formVal != "" {
return formVal
Expand Down
12 changes: 12 additions & 0 deletions app/models/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,18 @@ func (r *SendMessageRequest) SetAttributesFromForm(values url.Values) {
}
}

// Get Queue Url Request
func NewGetQueueUrlRequest() *GetQueueUrlRequest {
return &GetQueueUrlRequest{}
}

type GetQueueUrlRequest struct {
QueueName string `json:"QueueName"`
QueueOwnerAWSAccountId string `json:"QueueOwnerAWSAccountId"` // NOTE: not implemented
}

func (r *GetQueueUrlRequest) SetAttributesFromForm(values url.Values) {}

func NewSetQueueAttributesRequest() *SetQueueAttributesRequest {
return &SetQueueAttributesRequest{}
}
Expand Down
19 changes: 19 additions & 0 deletions app/models/responses.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,25 @@ func (r DeleteMessageResponse) GetRequestId() string {
return r.Metadata.RequestId
}

/*** Get Queue Url Response */
type GetQueueUrlResult struct {
QueueUrl string `xml:"QueueUrl,omitempty"`
}

type GetQueueUrlResponse struct {
Xmlns string `xml:"xmlns,attr,omitempty"`
Result GetQueueUrlResult `xml:"GetQueueUrlResult"`
Metadata app.ResponseMetadata `xml:"ResponseMetadata,omitempty"`
}

func (r GetQueueUrlResponse) GetResult() interface{} {
return r.Result
}

func (r GetQueueUrlResponse) GetRequestId() string {
return r.Metadata.RequestId
}

type SetQueueAttributesResponse struct {
Xmlns string `xml:"xmlns,attr,omitempty"`
Metadata app.ResponseMetadata `xml:"ResponseMetadata,omitempty"`
Expand Down
2 changes: 1 addition & 1 deletion app/router/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,14 @@ var routingTableV1 = map[string]func(r *http.Request) (int, interfaces.AbstractR
"ReceiveMessage": sqs.ReceiveMessageV1,
"ChangeMessageVisibility": sqs.ChangeMessageVisibilityV1,
"DeleteMessage": sqs.DeleteMessageV1,
"GetQueueUrl": sqs.GetQueueUrlV1,
"PurgeQueue": sqs.PurgeQueueV1,
}

var routingTable = map[string]http.HandlerFunc{
// SQS
"SendMessageBatch": sqs.SendMessageBatch,
"DeleteMessageBatch": sqs.DeleteMessageBatch,
"GetQueueUrl": sqs.GetQueueUrl,
"DeleteQueue": sqs.DeleteQueue,

// SNS
Expand Down
2 changes: 1 addition & 1 deletion app/router/router_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,13 +268,13 @@ func TestActionHandler_v0_xml(t *testing.T) {
"ReceiveMessage": sqs.ReceiveMessageV1,
"DeleteMessage": sqs.DeleteMessageV1,
"ChangeMessageVisibility": sqs.ChangeMessageVisibilityV1,
"GetQueueUrl": sqs.GetQueueUrlV1,
"PurgeQueue": sqs.PurgeQueueV1,
}
routingTable = map[string]http.HandlerFunc{
// SQS
"SendMessageBatch": sqs.SendMessageBatch,
"DeleteMessageBatch": sqs.DeleteMessageBatch,
"GetQueueUrl": sqs.GetQueueUrl,
"DeleteQueue": sqs.DeleteQueue,

// SNS
Expand Down
11 changes: 0 additions & 11 deletions app/sqs_messages.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,6 @@ type SendMessageBatchResponse struct {
Metadata ResponseMetadata `xml:"ResponseMetadata,omitempty"`
}

/*** Get Queue Url Response */
type GetQueueUrlResult struct {
QueueUrl string `xml:"QueueUrl,omitempty"`
}

type GetQueueUrlResponse struct {
Xmlns string `xml:"xmlns,attr,omitempty"`
Result GetQueueUrlResult `xml:"GetQueueUrlResult"`
Metadata ResponseMetadata `xml:"ResponseMetadata,omitempty"`
}

type SetQueueAttributesResponse struct {
Xmlns string `xml:"xmlns,attr,omitempty"`
Metadata ResponseMetadata `xml:"ResponseMetadata,omitempty"`
Expand Down
Loading

0 comments on commit 1ef3441

Please sign in to comment.