mirror of
https://github.com/getAlby/lndhub.go.git
synced 2025-12-23 15:44:51 +01:00
Check with github action
This commit is contained in:
@@ -7,8 +7,14 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/getAlby/lndhub.go/controllers"
|
||||||
"github.com/getAlby/lndhub.go/db/models"
|
"github.com/getAlby/lndhub.go/db/models"
|
||||||
|
"github.com/getAlby/lndhub.go/lib"
|
||||||
|
"github.com/getAlby/lndhub.go/lib/responses"
|
||||||
"github.com/getAlby/lndhub.go/lib/service"
|
"github.com/getAlby/lndhub.go/lib/service"
|
||||||
|
"github.com/getAlby/lndhub.go/lib/tokens"
|
||||||
|
"github.com/go-playground/validator/v10"
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
amqp "github.com/rabbitmq/amqp091-go"
|
amqp "github.com/rabbitmq/amqp091-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
@@ -20,6 +26,7 @@ type RabbitMQTestSuite struct {
|
|||||||
invoiceUpdateSubCancelFn context.CancelFunc
|
invoiceUpdateSubCancelFn context.CancelFunc
|
||||||
userToken string
|
userToken string
|
||||||
svc *service.LndhubService
|
svc *service.LndhubService
|
||||||
|
testQueueName string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *RabbitMQTestSuite) SetupSuite() {
|
func (suite *RabbitMQTestSuite) SetupSuite() {
|
||||||
@@ -30,72 +37,90 @@ func (suite *RabbitMQTestSuite) SetupSuite() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
suite.mlnd = mlnd
|
suite.mlnd = mlnd
|
||||||
|
suite.testQueueName = "test_invoice"
|
||||||
|
|
||||||
_, userTokens, err := createUsers(svc, 1)
|
_, userTokens, err := createUsers(svc, 1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error creating test users: %v", err)
|
log.Fatalf("error creating test users: %v", err)
|
||||||
}
|
}
|
||||||
suite.userToken = userTokens[0]
|
suite.userToken = userTokens[0]
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
suite.invoiceUpdateSubCancelFn = cancel
|
suite.invoiceUpdateSubCancelFn = cancel
|
||||||
go svc.InvoiceUpdateSubscription(ctx)
|
go svc.InvoiceUpdateSubscription(ctx)
|
||||||
|
suite.svc = svc
|
||||||
|
|
||||||
|
e := echo.New()
|
||||||
|
e.HTTPErrorHandler = responses.HTTPErrorHandler
|
||||||
|
e.Validator = &lib.CustomValidator{Validator: validator.New()}
|
||||||
|
|
||||||
|
suite.echo = e
|
||||||
|
suite.echo.Use(tokens.Middleware(suite.svc.Config.JWTSecret))
|
||||||
|
suite.echo.POST("/addinvoice", controllers.NewAddInvoiceController(suite.svc).AddInvoice)
|
||||||
go svc.StartRabbitMqPublisher(ctx)
|
go svc.StartRabbitMqPublisher(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *RabbitMQTestSuite) TestPublishInvoice(t *testing.T) {
|
func (suite *RabbitMQTestSuite) TestPublishInvoice() {
|
||||||
// create incoming invoice and fund account
|
|
||||||
invoice := suite.createAddInvoiceReq(1000, "integration test webhook", suite.userToken)
|
|
||||||
err := suite.mlnd.mockPaidInvoice(invoice, 0, false, nil)
|
|
||||||
assert.NoError(suite.T(), err)
|
|
||||||
|
|
||||||
// Check consume from rabbit
|
|
||||||
conn, err := amqp.Dial(suite.svc.Config.RabbitMQUri)
|
conn, err := amqp.Dial(suite.svc.Config.RabbitMQUri)
|
||||||
if err != nil {
|
assert.NoError(suite.T(), err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
ch, err := conn.Channel()
|
ch, err := conn.Channel()
|
||||||
if err != nil {
|
assert.NoError(suite.T(), err)
|
||||||
t.Error(err)
|
defer ch.Close()
|
||||||
}
|
|
||||||
|
|
||||||
q, err := ch.QueueDeclare(
|
q, err := ch.QueueDeclare(
|
||||||
"test_invoice",
|
suite.testQueueName,
|
||||||
false,
|
|
||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
nil,
|
nil,
|
||||||
)
|
)
|
||||||
if err != nil {
|
assert.NoError(suite.T(), err)
|
||||||
t.Error(err)
|
|
||||||
}
|
err = ch.QueueBind(q.Name, "#", suite.svc.Config.RabbitMQInvoiceExchange, false, nil)
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
|
|
||||||
|
invoice := suite.createAddInvoiceReq(1000, "integration test rabbitmq", suite.userToken)
|
||||||
|
err = suite.mlnd.mockPaidInvoice(invoice, 0, false, nil)
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
|
|
||||||
m, err := ch.Consume(
|
m, err := ch.Consume(
|
||||||
q.Name,
|
q.Name,
|
||||||
"",
|
"",
|
||||||
false,
|
true,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
nil,
|
nil,
|
||||||
)
|
)
|
||||||
if err != nil {
|
assert.NoError(suite.T(), err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Log("Blocking on message channel")
|
|
||||||
msg := <-m
|
msg := <-m
|
||||||
t.Logf("%s/n", string(msg.Body))
|
|
||||||
|
|
||||||
var recievedInvoice models.Invoice
|
var recievedInvoice models.Invoice
|
||||||
r := bytes.NewReader(msg.Body)
|
r := bytes.NewReader(msg.Body)
|
||||||
json.NewDecoder(r).Decode(&recievedInvoice)
|
err = json.NewDecoder(r).Decode(&recievedInvoice)
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
|
|
||||||
assert.Equal(t, invoice.RHash, recievedInvoice.RHash)
|
assert.Equal(suite.T(), invoice.RHash, recievedInvoice.RHash)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *RabbitMQTestSuite) TearDownSuite() {
|
||||||
|
conn, err := amqp.Dial(suite.svc.Config.RabbitMQUri)
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
ch, err := conn.Channel()
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
|
defer ch.Close()
|
||||||
|
|
||||||
|
_, err = ch.QueueDelete(suite.testQueueName, false, false, false)
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
|
|
||||||
|
err = ch.ExchangeDelete(suite.svc.Config.RabbitMQInvoiceExchange, true, false)
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRabbitMQTestSuite(t *testing.T) {
|
func TestRabbitMQTestSuite(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user