package upstreamapi import ( "context" "encoding/json" "strings" "testing" "git.5iot.com/iotlcm-public/iotlcm-upstream-proxy/internal/model" ) type errCodeTestChannel struct { response model.SimBaseResJson } func (f *errCodeTestChannel) SimBase(context.Context, *model.SimBaseReqJson) (model.SimBaseResJson, error) { return f.response, nil } func TestSimBasePreservesCarrierErrCode(t *testing.T) { const payload = `{"code":0,"message":"success","data":[{"code":9999,"message":"http status 797","errCode":"S00004","simKey":{"chanKey":"channel_003","iccid":"8986000000000000002"},"resData":{}}]}` var upstream model.SimResponseData[model.SimBaseResJson] if err := json.Unmarshal([]byte(payload), &upstream); err != nil { t.Fatal(err) } if len(upstream.Data) != 1 { t.Fatalf("decoded results = %d, want 1", len(upstream.Data)) } if upstream.Data[0].ErrCode != "S00004" { t.Fatalf("decoded errCode = %q, want S00004", upstream.Data[0].ErrCode) } api := NewUpstreamAPI() api.RegisterChan("channel_003", "test", &model.SimCardChannelCache{ Instance: &errCodeTestChannel{response: upstream.Data}, }) output, err := api.SimBase(context.Background(), &model.SimBaseReqJson{ SimKeys: []*model.SimKey{{ ChanKey: "channel_003", ICCID: "8986000000000000002", }}, }) if err != nil { t.Fatal(err) } if len(output) != 1 { t.Fatalf("proxied results = %d, want 1", len(output)) } if output[0].ErrCode != "S00004" { t.Fatalf("proxied errCode = %q, want S00004", output[0].ErrCode) } encoded, err := json.Marshal(output) if err != nil { t.Fatal(err) } if !strings.Contains(string(encoded), `"errCode":"S00004"`) { t.Fatalf("serialized response dropped errCode: %s", encoded) } }