Skip to content

Commit

Permalink
fix: fix pfcp test failed
Browse files Browse the repository at this point in the history
  • Loading branch information
andy89923 committed Jun 19, 2024
1 parent e83227f commit c09f4e2
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 27 deletions.
7 changes: 6 additions & 1 deletion internal/pfcp/message/send_test.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package message_test

import (
"context"
"net"
"testing"
"time"

"github.com/stretchr/testify/require"

smf_context "github.com/free5gc/smf/internal/context"
smf_pfcp "github.com/free5gc/smf/internal/pfcp"
"github.com/free5gc/smf/internal/pfcp/message"
"github.com/free5gc/smf/internal/pfcp/udp"
Expand All @@ -22,6 +24,9 @@ func TestSendPfcpSessionEstablishmentRequest(t *testing.T) {
}

func TestSendHeartbeatResponse(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
smf_context.GetSelf().Ctx = ctx
smf_context.GetSelf().PFCPCancelFunc = cancel
udp.Run(smf_pfcp.Dispatch)

udp.ServerStartTime = time.Now()
Expand All @@ -32,6 +37,6 @@ func TestSendHeartbeatResponse(t *testing.T) {
}
message.SendHeartbeatResponse(addr, seq)

err := udp.Server.Close()
err := udp.ClosePfcp()
require.NoError(t, err)
}
2 changes: 1 addition & 1 deletion internal/pfcp/reliable_pfcp_request_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func init() {
// smfContext.CPNodeID.NodeIdType = 0
// smfContext.CPNodeID.NodeIdValue = net.ParseIP("127.0.0.2").To4()

// udp.Run()
// go udp.Run()

// testAddr = &net.UDPAddr{
// IP: net.ParseIP("127.0.0.2"),
Expand Down
37 changes: 25 additions & 12 deletions internal/pfcp/udp/udp.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
package udp

import (
"context"
"errors"
"net"
"runtime/debug"
"strings"
"time"

"github.com/free5gc/pfcp"
"github.com/free5gc/pfcp/pfcpUdp"
"github.com/free5gc/smf/internal/context"
smf_context "github.com/free5gc/smf/internal/context"
"github.com/free5gc/smf/internal/logger"
)

const MaxPfcpUdpDataSize = 1024

var Server *pfcpUdp.PfcpServer

var cancelFunc *context.CancelFunc

var ServerStartTime time.Time

func Run(dispatch func(*pfcpUdp.Message)) {
Expand All @@ -26,7 +30,10 @@ func Run(dispatch func(*pfcpUdp.Message)) {
}
}()

serverIP := context.GetSelf().ListenIP().To4()
newCtx, newCancelFunc := context.WithCancel(smf_context.GetSelf().Ctx)
cancelFunc = &newCancelFunc

serverIP := smf_context.GetSelf().ListenIP().To4()
Server = pfcpUdp.NewPfcpServer(serverIP.String())

err := Server.Listen()
Expand All @@ -49,11 +56,13 @@ func Run(dispatch func(*pfcpUdp.Message)) {
if errReadFrom != nil {
if errReadFrom == pfcpUdp.ErrReceivedResentRequest {
logger.PfcpLog.Infoln(errReadFrom)
} else if strings.Contains(errReadFrom.Error(), "use of closed network connection") {
continue
} else {
logger.PfcpLog.Warnf("Read PFCP error: %v", errReadFrom)
logger.PfcpLog.Warnf("Read PFCP error: %v, msg: [%v]", errReadFrom, msg)
select {
case <-context.GetSelf().Ctx.Done():
// SMF is closing
case <-newCtx.Done():
// PFCP is closing
return
default:
continue
Expand All @@ -71,13 +80,6 @@ func Run(dispatch func(*pfcpUdp.Message)) {
ServerStartTime = time.Now()

logger.PfcpLog.Infof("Pfcp running... [%v]", ServerStartTime)

<-context.GetSelf().Ctx.Done()
if closeErr := Server.Close(); closeErr != nil {
logger.PfcpLog.Errorf("Pfcp close err: %+v", closeErr)
} else {
logger.PfcpLog.Infof("Pfcp server closed")
}
}

func SendPfcpResponse(sndMsg *pfcp.Message, addr *net.UDPAddr) {
Expand All @@ -90,3 +92,14 @@ func SendPfcpRequest(sndMsg *pfcp.Message, addr *net.UDPAddr) (rsvMsg *pfcpUdp.M
}
return Server.WriteRequestTo(sndMsg, addr)
}

func ClosePfcp() error {
(*cancelFunc)()
closeErr := Server.Close()
if closeErr != nil {
logger.PfcpLog.Errorf("Pfcp close err: %+v", closeErr)
} else {
logger.PfcpLog.Infof("Pfcp server closed")
}
return closeErr
}
14 changes: 9 additions & 5 deletions internal/pfcp/udp/udp_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package udp_test

import (
"context"
"net"
"testing"
"time"
Expand All @@ -10,7 +11,7 @@ import (
"github.com/free5gc/pfcp"
"github.com/free5gc/pfcp/pfcpType"
"github.com/free5gc/pfcp/pfcpUdp"
"github.com/free5gc/smf/internal/context"
smf_context "github.com/free5gc/smf/internal/context"
smf_pfcp "github.com/free5gc/smf/internal/pfcp"
"github.com/free5gc/smf/internal/pfcp/udp"
)
Expand All @@ -20,13 +21,16 @@ const testPfcpClientPort = 12345
func TestRun(t *testing.T) {
// Set SMF Node ID

context.GetSelf().CPNodeID = pfcpType.NodeID{
smf_context.GetSelf().CPNodeID = pfcpType.NodeID{
NodeIdType: pfcpType.NodeIdTypeIpv4Address,
IP: net.ParseIP("127.0.0.1").To4(),
}
context.GetSelf().ExternalAddr = "127.0.0.1"
context.GetSelf().ListenAddr = "127.0.0.1"
smf_context.GetSelf().ExternalAddr = "127.0.0.1"
smf_context.GetSelf().ListenAddr = "127.0.0.1"

ctx, cancel := context.WithCancel(context.Background())
smf_context.GetSelf().Ctx = ctx
smf_context.GetSelf().PFCPCancelFunc = cancel
udp.Run(smf_pfcp.Dispatch)

testPfcpReq := pfcp.Message{
Expand Down Expand Up @@ -60,7 +64,7 @@ func TestRun(t *testing.T) {
err := pfcpUdp.SendPfcpMessage(testPfcpReq, srcAddr, dstAddr)
require.Nil(t, err)

err = udp.Server.Close()
err = udp.ClosePfcp()
require.NoError(t, err)

time.Sleep(300 * time.Millisecond)
Expand Down
19 changes: 12 additions & 7 deletions internal/sbi/processor/pdu_session_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package processor_test

import (
"context"
"encoding/json"
"io"
"net/http"
Expand All @@ -19,7 +20,7 @@ import (
"github.com/free5gc/openapi"
"github.com/free5gc/openapi/Nsmf_PDUSession"
"github.com/free5gc/openapi/models"
"github.com/free5gc/smf/internal/context"
smf_context "github.com/free5gc/smf/internal/context"
"github.com/free5gc/smf/internal/pfcp"
"github.com/free5gc/smf/internal/pfcp/udp"
"github.com/free5gc/smf/internal/sbi/consumer"
Expand Down Expand Up @@ -118,7 +119,7 @@ var testConfig = factory.Config{
}

func initConfig() {
context.InitSmfContext(&testConfig)
smf_context.InitSmfContext(&testConfig)
factory.SmfConfig = &testConfig
}

Expand Down Expand Up @@ -365,6 +366,10 @@ func initDiscAMFStubNRF() {
}

func initStubPFCP() {
ctx, cancel := context.WithCancel(context.Background())
smf_context.GetSelf().Ctx = ctx
smf_context.GetSelf().PFCPCancelFunc = cancel

udp.Run(pfcp.Dispatch)
}

Expand Down Expand Up @@ -442,9 +447,9 @@ func TestHandlePDUSessionSMContextCreate(t *testing.T) {
initStubPFCP()

// modify associate setup status
allUPFs := context.GetSelf().UserPlaneInformation.UPFs
allUPFs := smf_context.GetSelf().UserPlaneInformation.UPFs
for _, upfNode := range allUPFs {
upfNode.UPF.UPFStatus = context.AssociatedSetUpSuccess
upfNode.UPF.UPFStatus = smf_context.AssociatedSetUpSuccess
}

testCases := []struct {
Expand Down Expand Up @@ -622,14 +627,14 @@ func TestHandlePDUSessionSMContextCreate(t *testing.T) {
createData := tc.request.JsonData
if createData != nil {
var ref string
if ref, err = context.ResolveRef(createData.Supi,
if ref, err = smf_context.ResolveRef(createData.Supi,
createData.PduSessionId); err == nil {
context.RemoveSMContext(ref)
smf_context.RemoveSMContext(ref)
}
}
})
}

err = udp.Server.Close()
err = udp.ClosePfcp()
require.NoError(t, err)
}
2 changes: 1 addition & 1 deletion pkg/utils/pfcp_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func InitPFCPFunc() (func(a *service.SmfApp), func()) {
smf_context.GetSelf().Ctx = ctx
smf_context.GetSelf().PFCPCancelFunc = cancel

go udp.Run(pfcp.Dispatch)
udp.Run(pfcp.Dispatch)

// Wait for PFCP start
time.Sleep(1000 * time.Millisecond)
Expand Down

0 comments on commit c09f4e2

Please sign in to comment.