Files
iotlcm/onelink-mock/internal/service/diagnosis_test.go
T

88 lines
2.8 KiB
Go

package service
import (
"encoding/json"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
)
func TestOneLinkDataDiagnosisUsesConfiguredAPNAndPCC(t *testing.T) {
service, err := NewService(t.TempDir()+"/mock.db")
if err != nil {
t.Fatal(err)
}
st := service.store.Snapshot()
st.Cards = GenerateSIMCards(time.Now(), 1)
card := &st.Cards[0]
card.APNs[0].DiagnosisStatus = "4"
card.APNs[0].ServiceUsageState = "96"
card.APNs[0].OverUseDetails = "16|17"
card.APNs[0].PCCs = []PCC{{ServiceCode: "2323232", Name: "APN 缺省流量", PolicyStatus: "4", ServiceUsageState: "1", ModifyTime: "20220812154700"}}
if err := service.store.SaveMutation(func(next *Store) error { *next = st; return nil }); err != nil {
t.Fatal(err)
}
st = service.store.Snapshot()
token := "diagnosis-test-token"
if err := service.store.SaveMutation(func(next *Store) error {
next.Tokens[st.AppIDs[0].AppID] = Token{Value: token, ExpiresAt: nowPlusHour()}
return nil
}); err != nil {
t.Fatal(err)
}
req := httptest.NewRequest(http.MethodGet, "/v5/ec/query/sim-data-diagnosis?token="+token+"&msisdn="+st.Cards[0].MSISDN, nil)
res := httptest.NewRecorder()
service.Router().ServeHTTP(res, req)
if res.Code != http.StatusOK {
t.Fatalf("status=%d body=%s", res.Code, res.Body.String())
}
var body Response
if err := json.Unmarshal(res.Body.Bytes(), &body); err != nil {
t.Fatal(err)
}
if body.Status != "0" {
t.Fatalf("response=%s", res.Body.String())
}
encoded, _ := json.Marshal(body.Result)
text := string(encoded)
for _, want := range []string{"\"apnStatus\":\"4\"", "\"apnServiceUsageState\":\"96\"", "\"overUseDetails\":\"16|17\"", "\"pccServiceCode\":\"2323232\"", "\"pccPolicyStatus\":\"4\""} {
if !contains(text, want) {
t.Fatalf("missing %s in %s", want, text)
}
}
}
func TestCardBindStatusRequiresMSISDNAndTestType(t *testing.T) {
service, err := NewService(t.TempDir()+"/mock.db")
if err != nil {
t.Fatal(err)
}
st := service.store.Snapshot()
st.Cards = GenerateSIMCards(time.Now(), 1)
token := "bind-test-token"
if err := service.store.SaveMutation(func(next *Store) error {
next.Tokens[st.AppIDs[0].AppID] = Token{Value: token, ExpiresAt: nowPlusHour()}
return nil
}); err != nil {
t.Fatal(err)
}
for _, query := range []string{"iccid=" + st.Cards[0].ICCID + "&testType=0", "msisdn=" + st.Cards[0].MSISDN} {
req := httptest.NewRequest(http.MethodGet, "/v5/ec/query/card-bind-status?token="+token+"&"+query, nil)
res := httptest.NewRecorder()
service.Router().ServeHTTP(res, req)
var body Response
if err := json.Unmarshal(res.Body.Bytes(), &body); err != nil {
t.Fatal(err)
}
if body.Status == "0" {
t.Fatalf("expected validation failure for %s", query)
}
}
}
func nowPlusHour() (value time.Time) { return time.Now().Add(time.Hour) }
func contains(value, want string) bool { return strings.Contains(value, want) }