| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026 |
- package handler
- import (
- "bytes"
- "context"
- "log/slog"
- "testing"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/mock"
- "github.com/mk6i/retro-aim-server/server/oscar"
- "github.com/mk6i/retro-aim-server/state"
- "github.com/mk6i/retro-aim-server/wire"
- )
- func TestICQHandler_DBQuery(t *testing.T) {
- type ICQMetaRequest struct {
- wire.ICQMetadata
- ReqSubType uint16
- MetaRequest any
- }
- type reqParams struct {
- ctx context.Context
- sess *state.Session
- inFrame wire.SNACFrame
- inBody wire.SNAC_0x15_0x02_BQuery
- rw oscar.ResponseWriter
- seq uint16
- wantErr error
- }
- type mockParam struct {
- req any
- wantErr error
- }
- type allMockParams struct {
- deleteMsgReq *mockParam
- findByDetails *mockParam
- findByEmail *mockParam
- findByEmail3 *mockParam
- findByInterests *mockParam
- findByUIN *mockParam
- findByUIN2 *mockParam
- findByWhitePages2 *mockParam
- fullUserInfo *mockParam
- offlineMsgReq *mockParam
- setAffiliations *mockParam
- setBasicInfo *mockParam
- setEmails *mockParam
- setInterests *mockParam
- setMoreInfo *mockParam
- setPermissions *mockParam
- setUserNotes *mockParam
- setWorkInfo *mockParam
- shortUserInfo *mockParam
- xmlReqData *mockParam
- }
- tests := []struct {
- name string
- reqParams reqParams
- allMockParams allMockParams
- }{
- {
- name: "MetaReqFullInfo - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqFullInfo,
- MetaRequest: wire.ICQ_0x07D0_0x051F_DBQueryMetaReqSearchByUIN{
- UIN: 123456789,
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- fullUserInfo: &mockParam{
- req: wire.ICQ_0x07D0_0x051F_DBQueryMetaReqSearchByUIN{
- UIN: 123456789,
- },
- },
- },
- },
- {
- name: "MetaReqShortInfo - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqShortInfo,
- MetaRequest: wire.ICQ_0x07D0_0x04BA_DBQueryMetaReqShortInfo{
- UIN: 123456789,
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- shortUserInfo: &mockParam{
- req: wire.ICQ_0x07D0_0x04BA_DBQueryMetaReqShortInfo{
- UIN: 123456789,
- },
- },
- },
- },
- {
- name: "MetaReqFullInfo2 - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqFullInfo2,
- MetaRequest: wire.ICQ_0x07D0_0x051F_DBQueryMetaReqSearchByUIN{
- UIN: 123456789,
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- fullUserInfo: &mockParam{
- req: wire.ICQ_0x07D0_0x051F_DBQueryMetaReqSearchByUIN{
- UIN: 123456789,
- },
- },
- },
- },
- {
- name: "MetaReqXMLReq - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqXMLReq,
- MetaRequest: wire.ICQ_0x07D0_0x0898_DBQueryMetaReqXMLReq{
- XMLRequest: "<xml></xml>",
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- xmlReqData: &mockParam{
- req: wire.ICQ_0x07D0_0x0898_DBQueryMetaReqXMLReq{
- XMLRequest: "<xml></xml>",
- },
- },
- },
- },
- {
- name: "MetaReqSetPermissions - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSetPermissions,
- MetaRequest: wire.ICQ_0x07D0_0x0424_DBQueryMetaReqSetPermissions{
- Authorization: 1,
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- setPermissions: &mockParam{
- req: wire.ICQ_0x07D0_0x0424_DBQueryMetaReqSetPermissions{
- Authorization: 1,
- },
- },
- },
- },
- {
- name: "MetaReqSearchByUIN - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSearchByUIN,
- MetaRequest: wire.ICQ_0x07D0_0x051F_DBQueryMetaReqSearchByUIN{
- UIN: 123456789,
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- findByUIN: &mockParam{
- req: wire.ICQ_0x07D0_0x051F_DBQueryMetaReqSearchByUIN{
- UIN: 123456789,
- },
- },
- },
- },
- {
- name: "MetaReqSearchByUIN2 - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSearchByUIN2,
- MetaRequest: wire.ICQ_0x07D0_0x0569_DBQueryMetaReqSearchByUIN2{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(1, uint16(1)),
- },
- },
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- findByUIN2: &mockParam{
- req: wire.ICQ_0x07D0_0x0569_DBQueryMetaReqSearchByUIN2{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(1, uint16(1)),
- },
- },
- },
- },
- },
- },
- {
- name: "MetaReqSearchByEmail - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSearchByEmail,
- MetaRequest: wire.ICQ_0x07D0_0x0529_DBQueryMetaReqSearchByEmail{
- Email: "test@aol.com",
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- findByEmail: &mockParam{
- req: wire.ICQ_0x07D0_0x0529_DBQueryMetaReqSearchByEmail{
- Email: "test@aol.com",
- },
- },
- },
- },
- {
- name: "MetaReqSearchByEmail3 - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSearchByEmail3,
- MetaRequest: wire.ICQ_0x07D0_0x0573_DBQueryMetaReqSearchByEmail3{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(1, uint16(1)),
- },
- },
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- findByEmail3: &mockParam{
- req: wire.ICQ_0x07D0_0x0573_DBQueryMetaReqSearchByEmail3{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(1, uint16(1)),
- },
- },
- },
- },
- },
- },
- {
- name: "MetaReqSearchByDetails - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSearchByDetails,
- MetaRequest: wire.ICQ_0x07D0_0x0515_DBQueryMetaReqSearchByDetails{
- FirstName: "john",
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- findByDetails: &mockParam{
- req: wire.ICQ_0x07D0_0x0515_DBQueryMetaReqSearchByDetails{
- FirstName: "john",
- },
- },
- },
- },
- {
- name: "MetaReqSearchWhitePages - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSearchWhitePages,
- MetaRequest: wire.ICQ_0x07D0_0x0533_DBQueryMetaReqSearchWhitePages{
- InterestsCode: 1,
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- findByInterests: &mockParam{
- req: wire.ICQ_0x07D0_0x0533_DBQueryMetaReqSearchWhitePages{
- InterestsCode: 1,
- },
- },
- },
- },
- {
- name: "MetaReqSearchWhitePages2 - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSearchWhitePages2,
- MetaRequest: wire.ICQ_0x07D0_0x055F_DBQueryMetaReqSearchWhitePages2{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(1, uint16(1)),
- },
- },
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- findByWhitePages2: &mockParam{
- req: wire.ICQ_0x07D0_0x055F_DBQueryMetaReqSearchWhitePages2{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(1, uint16(1)),
- },
- },
- },
- },
- },
- },
- {
- name: "MetaReqSetBasicInfo - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSetBasicInfo,
- MetaRequest: wire.ICQ_0x07D0_0x03EA_DBQueryMetaReqSetBasicInfo{
- FirstName: "john",
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- setBasicInfo: &mockParam{
- req: wire.ICQ_0x07D0_0x03EA_DBQueryMetaReqSetBasicInfo{
- FirstName: "john",
- },
- },
- },
- },
- {
- name: "MetaReqSetWorkInfo - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSetWorkInfo,
- MetaRequest: wire.ICQ_0x07D0_0x03F3_DBQueryMetaReqSetWorkInfo{
- ZIP: "11111",
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- setWorkInfo: &mockParam{
- req: wire.ICQ_0x07D0_0x03F3_DBQueryMetaReqSetWorkInfo{
- ZIP: "11111",
- },
- },
- },
- },
- {
- name: "MetaReqSetMoreInfo - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSetMoreInfo,
- MetaRequest: wire.ICQ_0x07D0_0x03FD_DBQueryMetaReqSetMoreInfo{
- Age: 100,
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- setMoreInfo: &mockParam{
- req: wire.ICQ_0x07D0_0x03FD_DBQueryMetaReqSetMoreInfo{
- Age: 100,
- },
- },
- },
- },
- {
- name: "MetaReqSetNotes - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSetNotes,
- MetaRequest: wire.ICQ_0x07D0_0x0406_DBQueryMetaReqSetNotes{
- Notes: "my note",
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- setUserNotes: &mockParam{
- req: wire.ICQ_0x07D0_0x0406_DBQueryMetaReqSetNotes{
- Notes: "my note",
- },
- },
- },
- },
- {
- name: "MetaReqSetEmails - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSetEmails,
- MetaRequest: wire.ICQ_0x07D0_0x040B_DBQueryMetaReqSetEmails{
- Emails: []struct {
- Publish uint8
- Email string `oscar:"len_prefix=uint16,nullterm"`
- }{
- {
- Email: "test@aol.com",
- },
- },
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- setEmails: &mockParam{
- req: wire.ICQ_0x07D0_0x040B_DBQueryMetaReqSetEmails{
- Emails: []struct {
- Publish uint8
- Email string `oscar:"len_prefix=uint16,nullterm"`
- }{
- {
- Email: "test@aol.com",
- },
- },
- },
- },
- },
- },
- {
- name: "MetaReqSetInterests - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSetInterests,
- MetaRequest: wire.ICQ_0x07D0_0x0410_DBQueryMetaReqSetInterests{
- Interests: []struct {
- Code uint16
- Keyword string `oscar:"len_prefix=uint16,nullterm"`
- }{
- {
- Keyword: "an_interest",
- },
- },
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- setInterests: &mockParam{
- req: wire.ICQ_0x07D0_0x0410_DBQueryMetaReqSetInterests{
- Interests: []struct {
- Code uint16
- Keyword string `oscar:"len_prefix=uint16,nullterm"`
- }{
- {
- Keyword: "an_interest",
- },
- },
- },
- },
- },
- },
- {
- name: "MetaReqSetAffiliations - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSetAffiliations,
- MetaRequest: wire.ICQ_0x07D0_0x041A_DBQueryMetaReqSetAffiliations{
- PastAffiliations: []struct {
- Code uint16
- Keyword string `oscar:"len_prefix=uint16,nullterm"`
- }{
- {
- Keyword: "a_past_affiliation",
- },
- },
- Affiliations: []struct {
- Code uint16
- Keyword string `oscar:"len_prefix=uint16,nullterm"`
- }{
- {
- Keyword: "an_affiliation",
- },
- },
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- setAffiliations: &mockParam{
- req: wire.ICQ_0x07D0_0x041A_DBQueryMetaReqSetAffiliations{
- PastAffiliations: []struct {
- Code uint16
- Keyword string `oscar:"len_prefix=uint16,nullterm"`
- }{
- {
- Keyword: "a_past_affiliation",
- },
- },
- Affiliations: []struct {
- Code uint16
- Keyword string `oscar:"len_prefix=uint16,nullterm"`
- }{
- {
- Keyword: "an_affiliation",
- },
- },
- },
- },
- },
- },
- {
- name: "MetaReqStat - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqStat0a8c,
- MetaRequest: struct{}{},
- },
- }),
- },
- },
- },
- seq: 1,
- },
- },
- {
- name: "unknown metadata request subtype",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: 0xCA8E,
- MetaRequest: struct{}{},
- },
- }),
- },
- },
- },
- seq: 1,
- wantErr: errUnknownICQMetaReqSubType,
- },
- },
- {
- name: "OfflineMsgReq - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: wire.ICQMetadataWithSubType{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryOfflineMsgReq,
- Seq: 1,
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- offlineMsgReq: &mockParam{},
- },
- },
- {
- name: "DeleteMsgReq - happy path",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: wire.ICQMetadataWithSubType{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryDeleteMsgReq,
- Seq: 1,
- },
- },
- }),
- },
- },
- },
- seq: 1,
- },
- allMockParams: allMockParams{
- deleteMsgReq: &mockParam{},
- },
- },
- {
- name: "unknown request type",
- reqParams: reqParams{
- sess: &state.Session{},
- inBody: wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: 0x13B4,
- Seq: 1,
- },
- ReqSubType: 0xCA8E,
- MetaRequest: struct{}{},
- },
- }),
- },
- },
- },
- seq: 1,
- wantErr: errUnknownICQMetaReqType,
- },
- }, // todo: add to a separate test
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- icqService := newMockICQService(t)
- switch {
- case tt.allMockParams.fullUserInfo != nil:
- icqService.EXPECT().
- FullUserInfo(mock.Anything, tt.reqParams.sess, tt.allMockParams.fullUserInfo.req, tt.reqParams.seq).
- Return(tt.allMockParams.fullUserInfo.wantErr)
- case tt.allMockParams.shortUserInfo != nil:
- icqService.EXPECT().
- ShortUserInfo(mock.Anything, tt.reqParams.sess, tt.allMockParams.shortUserInfo.req, tt.reqParams.seq).
- Return(tt.allMockParams.shortUserInfo.wantErr)
- case tt.allMockParams.xmlReqData != nil:
- icqService.EXPECT().
- XMLReqData(mock.Anything, tt.reqParams.sess, tt.allMockParams.xmlReqData.req, tt.reqParams.seq).
- Return(tt.allMockParams.xmlReqData.wantErr)
- case tt.allMockParams.setPermissions != nil:
- icqService.EXPECT().
- SetPermissions(mock.Anything, tt.reqParams.sess, tt.allMockParams.setPermissions.req, tt.reqParams.seq).
- Return(tt.allMockParams.setPermissions.wantErr)
- case tt.allMockParams.findByUIN != nil:
- icqService.EXPECT().
- FindByUIN(mock.Anything, tt.reqParams.sess, tt.allMockParams.findByUIN.req, tt.reqParams.seq).
- Return(tt.allMockParams.findByUIN.wantErr)
- case tt.allMockParams.findByUIN2 != nil:
- icqService.EXPECT().
- FindByUIN2(mock.Anything, tt.reqParams.sess, tt.allMockParams.findByUIN2.req, tt.reqParams.seq).
- Return(tt.allMockParams.findByUIN2.wantErr)
- case tt.allMockParams.findByEmail != nil:
- icqService.EXPECT().
- FindByICQEmail(mock.Anything, tt.reqParams.sess, tt.allMockParams.findByEmail.req, tt.reqParams.seq).
- Return(tt.allMockParams.findByEmail.wantErr)
- case tt.allMockParams.findByEmail3 != nil:
- icqService.EXPECT().
- FindByEmail3(mock.Anything, tt.reqParams.sess, tt.allMockParams.findByEmail3.req, tt.reqParams.seq).
- Return(tt.allMockParams.findByEmail3.wantErr)
- case tt.allMockParams.findByDetails != nil:
- icqService.EXPECT().
- FindByICQName(mock.Anything, tt.reqParams.sess, tt.allMockParams.findByDetails.req, tt.reqParams.seq).
- Return(tt.allMockParams.findByDetails.wantErr)
- case tt.allMockParams.findByInterests != nil:
- icqService.EXPECT().
- FindByICQInterests(mock.Anything, tt.reqParams.sess, tt.allMockParams.findByInterests.req, tt.reqParams.seq).
- Return(tt.allMockParams.findByInterests.wantErr)
- case tt.allMockParams.findByWhitePages2 != nil:
- icqService.EXPECT().
- FindByWhitePages2(mock.Anything, tt.reqParams.sess, tt.allMockParams.findByWhitePages2.req, tt.reqParams.seq).
- Return(tt.allMockParams.findByWhitePages2.wantErr)
- case tt.allMockParams.setBasicInfo != nil:
- icqService.EXPECT().
- SetBasicInfo(mock.Anything, tt.reqParams.sess, tt.allMockParams.setBasicInfo.req, tt.reqParams.seq).
- Return(tt.allMockParams.setBasicInfo.wantErr)
- case tt.allMockParams.setWorkInfo != nil:
- icqService.EXPECT().
- SetWorkInfo(mock.Anything, tt.reqParams.sess, tt.allMockParams.setWorkInfo.req, tt.reqParams.seq).
- Return(tt.allMockParams.setWorkInfo.wantErr)
- case tt.allMockParams.setMoreInfo != nil:
- icqService.EXPECT().
- SetMoreInfo(mock.Anything, tt.reqParams.sess, tt.allMockParams.setMoreInfo.req, tt.reqParams.seq).
- Return(tt.allMockParams.setMoreInfo.wantErr)
- case tt.allMockParams.setUserNotes != nil:
- icqService.EXPECT().
- SetUserNotes(mock.Anything, tt.reqParams.sess, tt.allMockParams.setUserNotes.req, tt.reqParams.seq).
- Return(tt.allMockParams.setUserNotes.wantErr)
- case tt.allMockParams.setEmails != nil:
- icqService.EXPECT().
- SetEmails(mock.Anything, tt.reqParams.sess, tt.allMockParams.setEmails.req, tt.reqParams.seq).
- Return(tt.allMockParams.setEmails.wantErr)
- case tt.allMockParams.setInterests != nil:
- icqService.EXPECT().
- SetInterests(mock.Anything, tt.reqParams.sess, tt.allMockParams.setInterests.req, tt.reqParams.seq).
- Return(tt.allMockParams.setInterests.wantErr)
- case tt.allMockParams.setAffiliations != nil:
- icqService.EXPECT().
- SetAffiliations(mock.Anything, tt.reqParams.sess, tt.allMockParams.setAffiliations.req, tt.reqParams.seq).
- Return(tt.allMockParams.setAffiliations.wantErr)
- case tt.allMockParams.offlineMsgReq != nil:
- icqService.EXPECT().
- OfflineMsgReq(mock.Anything, tt.reqParams.sess, tt.reqParams.seq).
- Return(tt.allMockParams.offlineMsgReq.wantErr)
- case tt.allMockParams.deleteMsgReq != nil:
- icqService.EXPECT().
- DeleteMsgReq(mock.Anything, tt.reqParams.sess, tt.reqParams.seq).
- Return(tt.allMockParams.deleteMsgReq.wantErr)
- }
- rt := NewICQHandler(slog.Default(), icqService)
- buf := &bytes.Buffer{}
- assert.NoError(t, wire.MarshalBE(tt.reqParams.inBody, buf))
- err := rt.DBQuery(nil, tt.reqParams.sess, wire.SNACFrame{}, buf, nil)
- assert.ErrorIs(t, err, tt.reqParams.wantErr)
- })
- }
- }
- // Test workaround for QIP 2005 bug where TLV length is incorrect.
- func TestICQHandler_DBQuery_QIP2005UINSearchBug(t *testing.T) {
- icqService := newMockICQService(t)
- type ICQMetaRequest struct {
- wire.ICQMetadata
- ReqSubType uint16
- MetaRequest any
- }
- expect := wire.ICQ_0x07D0_0x0569_DBQueryMetaReqSearchByUIN2{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsUIN, uint32(100009)),
- },
- },
- }
- icqService.EXPECT().
- FindByUIN2(mock.Anything, &state.Session{}, expect, uint16(1)).
- Return(nil)
- rt := NewICQHandler(slog.Default(), icqService)
- inBody := wire.SNAC_0x15_0x02_BQuery{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsMetadata, wire.ICQMessageReplyEnvelope{
- Message: ICQMetaRequest{
- ICQMetadata: wire.ICQMetadata{
- ReqType: wire.ICQDBQueryMetaReq,
- Seq: 1,
- },
- ReqSubType: wire.ICQDBQueryMetaReqSearchByUIN2,
- MetaRequest: wire.ICQ_0x07D0_0x0569_DBQueryMetaReqSearchByUIN2{
- TLVRestBlock: wire.TLVRestBlock{
- TLVList: wire.TLVList{
- wire.NewTLVBE(wire.ICQTLVTagsUIN, uint32(100009)),
- },
- },
- },
- },
- }),
- },
- },
- }
- buf := &bytes.Buffer{}
- assert.NoError(t, wire.MarshalBE(inBody, buf))
- b := buf.Bytes()
- b[18] = 6 // incorrectly set TLV length to 6 (should be 4)
- err := rt.DBQuery(nil, &state.Session{}, wire.SNACFrame{}, buf, nil)
- assert.NoError(t, err)
- }
|