123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057 |
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #include <open62541/types.h>
- #include <open62541/types_generated.h>
- #include <open62541/types_generated_encoding_binary.h>
- #include <open62541/types_generated_handling.h>
- #include <open62541/util.h>
- #include "ua_types_encoding_binary.h"
- #include "ua_types_encoding_json.h"
- #include <check.h>
- #include <float.h>
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #if defined(_MSC_VER)
- # pragma warning(disable: 4146)
- #endif
- /* Test Boolean */
- START_TEST(UA_Boolean_true_json_encode) {
-
- UA_Boolean *src = UA_Boolean_new();
- UA_Boolean_init(src);
- *src = UA_TRUE;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_BOOLEAN];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "true";
- ck_assert_str_eq(result, (char*)buf.data);
-
- UA_ByteString_deleteMembers(&buf);
- UA_Boolean_delete(src);
-
- }
- END_TEST
- START_TEST(UA_Boolean_false_json_encode) {
-
- UA_Boolean *src = UA_Boolean_new();
- UA_Boolean_init(src);
- *src = UA_FALSE;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_BOOLEAN];
- UA_ByteString buf;
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- ck_assert_int_eq(size, 5);
-
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
-
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "false";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Boolean_delete(src);
- }
- END_TEST
- START_TEST(UA_Boolean_true_bufferTooSmall_json_encode) {
-
- UA_Boolean *src = UA_Boolean_new();
- UA_Boolean_init(src);
- *src = UA_FALSE;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_BOOLEAN];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- char* result = "";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Boolean_delete(src);
- }
- END_TEST
- /* Test String */
- START_TEST(UA_String_json_encode) {
- // given
- UA_String src = UA_STRING("hello");
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
-
- UA_ByteString buf;
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- // when
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"hello\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_String_Empty_json_encode) {
- // given
- UA_String src = UA_STRING("");
- UA_ByteString buf;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
-
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- // when
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_String_Null_json_encode) {
- // given
- UA_String src = UA_STRING_NULL;
- UA_ByteString buf;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString_allocBuffer(&buf, size+1);
-
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- // when
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "null";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_String_escapesimple_json_encode) {
- // given
- UA_String src = UA_STRING("\b\th\"e\fl\nl\\o\r");
- UA_ByteString buf;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- // when
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"\\b\\th\\\"e\\fl\\nl\\\\o\\r\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_String_escapeutf_json_encode) {
- // given
- UA_String src = UA_STRING("he\\zsdl\alo€ \x26\x3A asdasd");
- UA_ByteString buf;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- // when
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"he\\\\zsdl\\u0007lo€ &: asdasd\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_String_special_json_encode) {
- // given
- UA_String src = UA_STRING("𝄞𠂊𝕥🔍");
- UA_ByteString buf;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STRING];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- // when
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"𝄞𠂊𝕥🔍\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- /* Byte */
- START_TEST(UA_Byte_Max_Number_json_encode) {
- UA_Byte *src = UA_Byte_new();
- *src = 255;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTE];
- UA_ByteString buf;
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "255";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Byte_delete(src);
- }
- END_TEST
- START_TEST(UA_Byte_Min_Number_json_encode) {
- UA_Byte *src = UA_Byte_new();
- *src = 0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTE];
- UA_ByteString buf;
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "0";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Byte_delete(src);
- }
- END_TEST
- START_TEST(UA_Byte_smallbuf_Number_json_encode) {
- UA_Byte *src = UA_Byte_new();
- *src = 255;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTE];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_Byte_delete(src);
- }
- END_TEST
- /* sByte */
- START_TEST(UA_SByte_Max_Number_json_encode) {
- UA_SByte *src = UA_SByte_new();
- *src = 127;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_SBYTE];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "127";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_SByte_delete(src);
- }
- END_TEST
- START_TEST(UA_SByte_Min_Number_json_encode) {
- UA_SByte *src = UA_SByte_new();
- *src = -128;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_SBYTE];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "-128";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_SByte_delete(src);
- }
- END_TEST
- START_TEST(UA_SByte_Zero_Number_json_encode) {
- UA_SByte *src = UA_SByte_new();
- *src = 0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_SBYTE];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "0";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_SByte_delete(src);
- }
- END_TEST
- START_TEST(UA_SByte_smallbuf_Number_json_encode) {
- UA_SByte *src = UA_SByte_new();
- *src = 127;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_SBYTE];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_SByte_delete(src);
- }
- END_TEST
- /* UInt16 */
- START_TEST(UA_UInt16_Max_Number_json_encode) {
- UA_UInt16 *src = UA_UInt16_new();
- *src = 65535;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT16];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "65535";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_UInt16_delete(src);
- }
- END_TEST
- START_TEST(UA_UInt16_Min_Number_json_encode) {
- UA_UInt16 *src = UA_UInt16_new();
- *src = 0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT16];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "0";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_UInt16_delete(src);
- }
- END_TEST
- START_TEST(UA_UInt16_smallbuf_Number_json_encode) {
- UA_UInt16 *src = UA_UInt16_new();
- *src = 255;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT16];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_UInt16_delete(src);
- }
- END_TEST
- /* Int16 */
- START_TEST(UA_Int16_Max_Number_json_encode) {
- UA_Int16 *src = UA_Int16_new();
- *src = 32767;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT16];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "32767";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Int16_delete(src);
- }
- END_TEST
- START_TEST(UA_Int16_Min_Number_json_encode) {
- UA_Int16 *src = UA_Int16_new();
- *src = -32768;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT16];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "-32768";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Int16_delete(src);
- }
- END_TEST
- START_TEST(UA_Int16_Zero_Number_json_encode) {
- UA_Int16 *src = UA_Int16_new();
- *src = 0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT16];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "0";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Int16_delete(src);
- }
- END_TEST
- START_TEST(UA_Int16_smallbuf_Number_json_encode) {
- UA_Int16 *src = UA_Int16_new();
- *src = 127;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT16];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_Int16_delete(src);
- }
- END_TEST
- /* UInt32 */
- START_TEST(UA_UInt32_Max_Number_json_encode) {
- UA_UInt32 *src = UA_UInt32_new();
- *src = 4294967295;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT32];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "4294967295";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_UInt32_delete(src);
- }
- END_TEST
- START_TEST(UA_UInt32_Min_Number_json_encode) {
- UA_UInt32 *src = UA_UInt32_new();
- *src = 0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT32];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "0";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_UInt32_delete(src);
- }
- END_TEST
- START_TEST(UA_UInt32_smallbuf_Number_json_encode) {
- UA_UInt32 *src = UA_UInt32_new();
- *src = 255;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT32];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_UInt32_delete(src);
- }
- END_TEST
- /* Int32 */
- START_TEST(UA_Int32_Max_Number_json_encode) {
- UA_Int32 *src = UA_Int32_new();
- *src = 2147483647;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT32];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "2147483647";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Int32_delete(src);
- }
- END_TEST
- START_TEST(UA_Int32_Min_Number_json_encode) {
- UA_Int32 src = -2147483648;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT32];
- size_t size = UA_calcSizeJson((void *)&src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *)&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "-2147483648";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_Int32_Zero_Number_json_encode) {
- UA_Int32 *src = UA_Int32_new();
- *src = 0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT32];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "0";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Int32_delete(src);
- }
- END_TEST
- START_TEST(UA_Int32_smallbuf_Number_json_encode) {
- UA_Int32 *src = UA_Int32_new();
- *src = 127;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT32];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_Int32_delete(src);
- }
- END_TEST
- /* UINT64*/
- START_TEST(UA_UInt64_Max_Number_json_encode) {
- UA_UInt64 *src = UA_UInt64_new();
- //*src = 18446744073709551615;
- ((u8*)src)[0] = 0xFF;
- ((u8*)src)[1] = 0xFF;
- ((u8*)src)[2] = 0xFF;
- ((u8*)src)[3] = 0xFF;
- ((u8*)src)[4] = 0xFF;
- ((u8*)src)[5] = 0xFF;
- ((u8*)src)[6] = 0xFF;
- ((u8*)src)[7] = 0xFF;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT64];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"18446744073709551615\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_UInt64_delete(src);
- }
- END_TEST
- START_TEST(UA_UInt64_Min_Number_json_encode) {
- UA_UInt64 *src = UA_UInt64_new();
- *src = 0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT64];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"0\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_UInt64_delete(src);
- }
- END_TEST
- START_TEST(UA_UInt64_smallbuf_Number_json_encode) {
- UA_UInt64 *src = UA_UInt64_new();
- //*src = -9223372036854775808;
- ((u8*)src)[0] = 0x00;
- ((u8*)src)[1] = 0x00;
- ((u8*)src)[2] = 0x00;
- ((u8*)src)[3] = 0x00;
- ((u8*)src)[4] = 0x00;
- ((u8*)src)[5] = 0x00;
- ((u8*)src)[6] = 0x00;
- ((u8*)src)[7] = 0x80;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_UINT64];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_UInt64_delete(src);
- }
- END_TEST
- /* Int64 */
- START_TEST(UA_Int64_Max_Number_json_encode) {
- UA_Int64 *src = UA_Int64_new();
- //*src = 9223372036854775808;
- ((u8*)src)[0] = 0xFF;
- ((u8*)src)[1] = 0xFF;
- ((u8*)src)[2] = 0xFF;
- ((u8*)src)[3] = 0xFF;
- ((u8*)src)[4] = 0xFF;
- ((u8*)src)[5] = 0xFF;
- ((u8*)src)[6] = 0xFF;
- ((u8*)src)[7] = 0x7F;
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT64];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"9223372036854775807\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Int64_delete(src);
- }
- END_TEST
- START_TEST(UA_Int64_Min_Number_json_encode) {
- UA_Int64 *src = UA_Int64_new();
-
- // TODO: compiler error: integer constant is so large that it is unsigned [-Werror]
- //*src = -9223372036854775808;
-
- ((u8*)src)[0] = 0x00;
- ((u8*)src)[1] = 0x00;
- ((u8*)src)[2] = 0x00;
- ((u8*)src)[3] = 0x00;
- ((u8*)src)[4] = 0x00;
- ((u8*)src)[5] = 0x00;
- ((u8*)src)[6] = 0x00;
- ((u8*)src)[7] = 0x80;
-
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT64];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"-9223372036854775808\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Int64_delete(src);
- }
- END_TEST
- START_TEST(UA_Int64_Zero_Number_json_encode) {
- UA_Int64 *src = UA_Int64_new();
- *src = 0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT64];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"0\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Int64_delete(src);
- }
- END_TEST
- START_TEST(UA_Int64_smallbuf_Number_json_encode) {
- UA_Int64 *src = UA_Int64_new();
- *src = 127;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_INT64];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_Int64_delete(src);
- }
- END_TEST
- START_TEST(UA_Double_json_encode) {
- UA_Double src = 1.1234;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "1.1233999999999999541699935434735380113124847412109375";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_Double_pluszero_json_encode) {
- UA_Double src = 0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "0";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_Double_minuszero_json_encode) {
- UA_Double src = -0;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "0";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_Double_plusInf_json_encode) {
- UA_Double src = INFINITY;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"Infinity\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_Double_minusInf_json_encode) {
- UA_Double src = -INFINITY;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"-Infinity\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_Double_nan_json_encode) {
- UA_Double src = NAN;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"NaN\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_Double_onesmallest_json_encode) {
- UA_Double src = 1.0000000000000002220446049250313080847263336181640625;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DOUBLE];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "1.0000000000000002220446049250313080847263336181640625";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_Float_json_encode) {
- UA_Float src = 1.0000000000F;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_FLOAT];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "1";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- /* -------------------------LocalizedText------------------------- */
- START_TEST(UA_LocText_json_encode) {
- UA_LocalizedText *src = UA_LocalizedText_new();
- UA_LocalizedText_init(src);
- src->locale = UA_STRING_ALLOC("theLocale");
- src->text = UA_STRING_ALLOC("theText");
- const UA_DataType *type = &UA_TYPES[UA_TYPES_LOCALIZEDTEXT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Locale\":\"theLocale\",\"Text\":\"theText\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_LocalizedText_delete(src);
- }
- END_TEST
- START_TEST(UA_LocText_NonReversible_json_encode) {
- UA_LocalizedText *src = UA_LocalizedText_new();
- UA_LocalizedText_init(src);
- src->locale = UA_STRING_ALLOC("theLocale");
- src->text = UA_STRING_ALLOC("theText");
- const UA_DataType *type = &UA_TYPES[UA_TYPES_LOCALIZEDTEXT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"theText\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_LocalizedText_delete(src);
- }
- END_TEST
- START_TEST(UA_LocText_smallBuffer_json_encode) {
- UA_LocalizedText *src = UA_LocalizedText_new();
- UA_LocalizedText_init(src);
- src->locale = UA_STRING_ALLOC("theLocale");
- src->text = UA_STRING_ALLOC("theText");
- const UA_DataType *type = &UA_TYPES[UA_TYPES_LOCALIZEDTEXT];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 4);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[4];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_LocalizedText_delete(src);
- }
- END_TEST
- /* --------------------------------GUID----------------------------------- */
- START_TEST(UA_Guid_json_encode) {
- UA_Guid src = {3, 9, 10, {8, 7, 6, 5, 4, 3, 2, 1}};
- const UA_DataType *type = &UA_TYPES[UA_TYPES_GUID];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"00000003-0009-000A-0807-060504030201\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- START_TEST(UA_Guid_smallbuf_json_encode) {
- UA_Guid *src = UA_Guid_new();
- *src = UA_Guid_random();
- const UA_DataType *type = &UA_TYPES[UA_TYPES_GUID];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_Guid_delete(src);
- }
- END_TEST
- /* -------------------------DateTime--------------------------------------*/
- START_TEST(UA_DateTime_json_encode) {
- UA_DateTime *src = UA_DateTime_new();
- *src = UA_DateTime_fromUnixTime(1234567);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DATETIME];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"1970-01-15T06:56:07Z\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_DateTime_delete(src);
- }
- END_TEST
- START_TEST(UA_DateTime_with_nanoseconds_json_encode) {
- UA_DateTime *src = UA_DateTime_new();
- *src = UA_DateTime_fromUnixTime(1234567) + 8901234;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DATETIME];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"1970-01-15T06:56:07.8901234Z\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_DateTime_delete(src);
- }
- END_TEST
- /* ------------------------Statuscode--------------------------------- */
- START_TEST(UA_StatusCode_json_encode) {
- UA_StatusCode *src = UA_StatusCode_new();
- *src = UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STATUSCODE];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "2161770496";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_StatusCode_delete(src);
- }
- END_TEST
- START_TEST(UA_StatusCode_nonReversible_json_encode) {
- UA_StatusCode *src = UA_StatusCode_new();
- *src = UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STATUSCODE];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Code\":2161770496,\"Symbol\":\"BadAggregateConfigurationRejected\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_StatusCode_delete(src);
- }
- END_TEST
- START_TEST(UA_StatusCode_nonReversible_good_json_encode) {
- UA_StatusCode *src = UA_StatusCode_new();
- *src = UA_STATUSCODE_GOOD;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STATUSCODE];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "null";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_StatusCode_delete(src);
- }
- END_TEST
- START_TEST(UA_StatusCode_smallbuf_json_encode) {
- UA_StatusCode *src = UA_StatusCode_new();
- *src = UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_STATUSCODE];
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_StatusCode_delete(src);
- }
- END_TEST
- /* -------------------------------NodeId--------------------------------*/
- /* Numeric */
- START_TEST(UA_NodeId_Numeric_json_encode) {
- UA_NodeId *src = UA_NodeId_new();
- *src = UA_NODEID_NUMERIC(0, 5555);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Id\":5555}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_NodeId_delete(src);
- }
- END_TEST
- START_TEST(UA_NodeId_Numeric_Namespace_json_encode) {
- UA_NodeId *src = UA_NodeId_new();
- *src = UA_NODEID_NUMERIC(4, 5555);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Id\":5555,\"Namespace\":4}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_NodeId_delete(src);
- }
- END_TEST
- /* String */
- START_TEST(UA_NodeId_String_json_encode) {
- UA_NodeId *src = UA_NodeId_new();
- *src = UA_NODEID_STRING_ALLOC(0, "foobar");
- const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":1,\"Id\":\"foobar\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_NodeId_delete(src);
- }
- END_TEST
- START_TEST(UA_NodeId_String_Namespace_json_encode) {
- UA_NodeId *src = UA_NodeId_new();
- *src = UA_NODEID_STRING_ALLOC(5, "foobar");
- const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":1,\"Id\":\"foobar\",\"Namespace\":5}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_NodeId_delete(src);
- }
- END_TEST
- /* Guid */
- START_TEST(UA_NodeId_Guid_json_encode) {
- UA_NodeId *src = UA_NodeId_new();
- UA_NodeId_init(src);
- UA_Guid g = {3, 9, 10, {8, 7, 6, 5, 4, 3, 2, 1}};
- *src = UA_NODEID_GUID(0, g);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":2,\"Id\":\"00000003-0009-000A-0807-060504030201\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_NodeId_delete(src);
- }
- END_TEST
- START_TEST(UA_NodeId_Guid_Namespace_json_encode) {
- UA_NodeId *src = UA_NodeId_new();
- UA_Guid g = {3, 9, 10, {8, 7, 6, 5, 4, 3, 2, 1}};
- *src = UA_NODEID_GUID(5, g);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- // {"IdType":2,"Id":"00000003-0009-000A-0807-060504030201","Namespace":5}
- ck_assert_int_eq(size, 70);
-
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":2,\"Id\":\"00000003-0009-000A-0807-060504030201\",\"Namespace\":5}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_NodeId_delete(src);
- }
- END_TEST
- /* ByteString */
- START_TEST(UA_NodeId_ByteString_json_encode) {
- UA_NodeId *src = UA_NodeId_new();
- *src = UA_NODEID_BYTESTRING_ALLOC(0, "asdfasdf");
- const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- //{"IdType":3,"Id":"YXNkZmFzZGY="}
- ck_assert_int_eq(size, 32);
-
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":3,\"Id\":\"YXNkZmFzZGY=\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_NodeId_delete(src);
- }
- END_TEST
- START_TEST(UA_NodeId_ByteString_Namespace_json_encode) {
- UA_NodeId *src = UA_NodeId_new();
- *src = UA_NODEID_BYTESTRING_ALLOC(5, "asdfasdf");
- const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":3,\"Id\":\"YXNkZmFzZGY=\",\"Namespace\":5}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_NodeId_delete(src);
- }
- END_TEST
- /* Non-reversible, Namespace */
- START_TEST(UA_NodeId_NonReversible_Numeric_Namespace_json_encode) {
- UA_NodeId *src = UA_NodeId_new();
- *src = UA_NODEID_NUMERIC(2, 5555);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_NODEID];
-
- UA_String namespaces[3] = {UA_STRING("ns0"),UA_STRING("ns1"),UA_STRING("ns2")};
- size_t size = UA_calcSizeJson((void *) src, type, namespaces, 3, NULL, 0, UA_FALSE);
- ck_assert_int_ne(size, 0);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, namespaces, 3, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Id\":5555,\"Namespace\":\"ns2\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_NodeId_delete(src);
- }
- END_TEST
- /* --------------------Diagnostic Info------------------------- */
- START_TEST(UA_DiagInfo_json_encode) {
- UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
- UA_DiagnosticInfo_init(src);
- src->hasAdditionalInfo = UA_TRUE;
- src->hasInnerDiagnosticInfo = UA_FALSE;
- src->hasInnerStatusCode = UA_TRUE;
- src->hasLocale = UA_TRUE;
- src->hasSymbolicId = UA_TRUE;
- src->hasLocalizedText = UA_TRUE;
- src->hasNamespaceUri = UA_TRUE;
- UA_StatusCode statusCode = UA_STATUSCODE_BADARGUMENTSMISSING;
- src->additionalInfo = UA_STRING_ALLOC("additionalInfo");
- src->innerStatusCode = statusCode;
- src->locale = 12;
- src->symbolicId = 13;
- src->localizedText = 14;
- src->namespaceUri = 15;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"SymbolicId\":13,\"NamespaceUri\":15,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_DiagnosticInfo_delete(src);
- }
- END_TEST
- START_TEST(UA_DiagInfo_withInner_json_encode) {
- UA_DiagnosticInfo *innerDiag = UA_DiagnosticInfo_new();
- UA_DiagnosticInfo_init(innerDiag);
- innerDiag->hasAdditionalInfo = UA_TRUE;
- innerDiag->additionalInfo = UA_STRING_ALLOC("INNER ADDITION INFO");
- innerDiag->hasInnerDiagnosticInfo = UA_FALSE;
- innerDiag->hasInnerStatusCode = UA_FALSE;
- innerDiag->hasLocale = UA_FALSE;
- innerDiag->hasSymbolicId = UA_FALSE;
- innerDiag->hasLocalizedText = UA_FALSE;
- innerDiag->hasNamespaceUri = UA_FALSE;
- UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
- UA_DiagnosticInfo_init(src);
- src->hasAdditionalInfo = UA_TRUE;
- src->hasInnerDiagnosticInfo = UA_TRUE;
- src->hasInnerStatusCode = UA_TRUE;
- src->hasLocale = UA_TRUE;
- src->hasSymbolicId = UA_TRUE;
- src->hasLocalizedText = UA_TRUE;
- src->hasNamespaceUri = UA_FALSE;
- UA_StatusCode statusCode = UA_STATUSCODE_BADARGUMENTSMISSING;
- src->additionalInfo = UA_STRING_ALLOC("additionalInfo");
- src->innerDiagnosticInfo = innerDiag;
- src->innerStatusCode = statusCode;
- src->locale = 12;
- src->symbolicId = 13;
- src->localizedText = 14;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
- UA_ByteString buf;
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- //{"SymbolicId":13,"LocalizedText":14,"Locale":12,"AdditionalInfo":"additionalInfo","InnerStatusCode":2155216896,"InnerDiagnosticInfo":{"AdditionalInfo":"INNER ADDITION INFO"}}
- ck_assert_int_eq(size, 174);
-
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896,\"InnerDiagnosticInfo\":{\"AdditionalInfo\":\"INNER ADDITION INFO\"}}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_DiagnosticInfo_delete(src);
- }
- END_TEST
- START_TEST(UA_DiagInfo_withTwoInner_json_encode) {
-
- UA_DiagnosticInfo *innerDiag2 = UA_DiagnosticInfo_new();
- UA_DiagnosticInfo_init(innerDiag2);
- innerDiag2->hasAdditionalInfo = UA_TRUE;
- innerDiag2->additionalInfo = UA_STRING_ALLOC("INNER ADDITION INFO2");
- innerDiag2->hasInnerDiagnosticInfo = UA_FALSE;
- innerDiag2->hasInnerStatusCode = UA_FALSE;
- innerDiag2->hasLocale = UA_FALSE;
- innerDiag2->hasSymbolicId = UA_FALSE;
- innerDiag2->hasLocalizedText = UA_FALSE;
- innerDiag2->hasNamespaceUri = UA_FALSE;
-
- UA_DiagnosticInfo *innerDiag = UA_DiagnosticInfo_new();
- UA_DiagnosticInfo_init(innerDiag);
- innerDiag->hasAdditionalInfo = UA_TRUE;
- innerDiag->additionalInfo = UA_STRING_ALLOC("INNER ADDITION INFO");
- innerDiag->hasInnerDiagnosticInfo = UA_TRUE;
- innerDiag->innerDiagnosticInfo = innerDiag2;
- innerDiag->hasInnerStatusCode = UA_FALSE;
- innerDiag->hasLocale = UA_FALSE;
- innerDiag->hasSymbolicId = UA_FALSE;
- innerDiag->hasLocalizedText = UA_FALSE;
- innerDiag->hasNamespaceUri = UA_FALSE;
- UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
- UA_DiagnosticInfo_init(src);
-
- src->hasAdditionalInfo = UA_TRUE;
- src->hasInnerDiagnosticInfo = UA_TRUE;
- src->hasInnerStatusCode = UA_TRUE;
- src->hasLocale = UA_TRUE;
- src->hasSymbolicId = UA_TRUE;
- src->hasLocalizedText = UA_TRUE;
- src->hasNamespaceUri = UA_FALSE;
- UA_StatusCode statusCode = UA_STATUSCODE_BADARGUMENTSMISSING;
- src->additionalInfo = UA_STRING_ALLOC("additionalInfo");
- src->innerDiagnosticInfo = innerDiag;
- src->innerStatusCode = statusCode;
- src->locale = 12;
- src->symbolicId = 13;
- src->localizedText = 14;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896,\"InnerDiagnosticInfo\":{\"AdditionalInfo\":\"INNER ADDITION INFO\",\"InnerDiagnosticInfo\":{\"AdditionalInfo\":\"INNER ADDITION INFO2\"}}}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_DiagnosticInfo_delete(src);
- }
- END_TEST
- START_TEST(UA_DiagInfo_noFields_json_encode) {
- UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
- UA_DiagnosticInfo_init(src);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "null";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_DiagnosticInfo_delete(src);
- }
- END_TEST
- START_TEST(UA_DiagInfo_smallBuffer_json_encode) {
- UA_DiagnosticInfo *src = UA_DiagnosticInfo_new();
- UA_DiagnosticInfo_init(src);
- src->hasAdditionalInfo = UA_TRUE;
- src->hasInnerDiagnosticInfo = UA_FALSE;
- src->hasInnerStatusCode = UA_TRUE;
- src->hasLocale = UA_TRUE;
- src->hasSymbolicId = UA_TRUE;
- src->hasLocalizedText = UA_TRUE;
- src->hasNamespaceUri = UA_FALSE;
- UA_StatusCode statusCode = UA_STATUSCODE_BADARGUMENTSMISSING;
- src->additionalInfo = UA_STRING_ALLOC("additionalInfo");
- src->innerStatusCode = statusCode;
- src->locale = 12;
- src->symbolicId = 13;
- src->localizedText = 14;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DIAGNOSTICINFO];
-
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, 2);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[2];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- UA_ByteString_deleteMembers(&buf);
- UA_DiagnosticInfo_delete(src);
- }
- END_TEST
- /* ---------------ByteString----------------- */
- START_TEST(UA_ByteString_json_encode) {
- UA_ByteString *src = UA_ByteString_new();
- UA_ByteString_init(src);
- *src = UA_BYTESTRING_ALLOC("asdfasdf");
- const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTESTRING];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"YXNkZmFzZGY=\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ByteString_delete(src);
- }
- END_TEST
- START_TEST(UA_ByteString2_json_encode) {
- UA_ByteString *src = UA_ByteString_new();
- UA_ByteString_init(src);
- *src = UA_BYTESTRING_ALLOC("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
- const UA_DataType *type = &UA_TYPES[UA_TYPES_BYTESTRING];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
-
- //s = UA_decodeJson()
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4=\"";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ByteString_delete(src);
- }
- END_TEST
- START_TEST(UA_ByteString3_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_ByteString *variantContent = UA_ByteString_new();
- *variantContent = UA_BYTESTRING_ALLOC("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
- UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_BYTESTRING]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- //printf("%s\n\n", (char*)buf.data);
- UA_Variant out;
- UA_Variant_init(&out);
- retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_ByteString *srcData = ((UA_ByteString*)src->data);
- UA_ByteString *outData = ((UA_ByteString*)out.data);
- ck_assert(UA_ByteString_equal(srcData, outData));
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&out);
- UA_Variant_delete(src);
- }
- END_TEST
- /* ------------------QualifiedName---------------------------- */
- START_TEST(UA_QualName_json_encode) {
- UA_QualifiedName *src = UA_QualifiedName_new();
- UA_QualifiedName_init(src);
- src->name = UA_STRING_ALLOC("derName");
- src->namespaceIndex = 1;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_QUALIFIEDNAME];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Name\":\"derName\",\"Uri\":1}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_QualifiedName_delete(src);
- }
- END_TEST
- START_TEST(UA_QualName_NonReversible_json_encode) {
- UA_QualifiedName *src = UA_QualifiedName_new();
- UA_QualifiedName_init(src);
- src->name = UA_STRING_ALLOC("derName");
- src->namespaceIndex = 1;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_QUALIFIEDNAME];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Name\":\"derName\",\"Uri\":1}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_QualifiedName_delete(src);
- }
- END_TEST
- START_TEST(UA_QualName_NonReversible_Namespace_json_encode) {
- UA_QualifiedName *src = UA_QualifiedName_new();
- UA_QualifiedName_init(src);
- src->name = UA_STRING_ALLOC("derName");
- src->namespaceIndex = 2;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_QUALIFIEDNAME];
- UA_String namespaces[3] = {UA_STRING("ns0"),UA_STRING("ns1"),UA_STRING("ns2")};
- size_t size = UA_calcSizeJson((void *) src, type, namespaces, 3, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, namespaces, 3, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Name\":\"derName\",\"Uri\":\"ns2\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_QualifiedName_delete(src);
- }
- END_TEST
- START_TEST(UA_QualName_NonReversible_NoNamespaceAsNumber_json_encode) {
- UA_QualifiedName *src = UA_QualifiedName_new();
- UA_QualifiedName_init(src);
- src->name = UA_STRING_ALLOC("derName");
- src->namespaceIndex = 6789;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_QUALIFIEDNAME];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Name\":\"derName\",\"Uri\":6789}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_QualifiedName_delete(src);
- }
- END_TEST
- /* ----------------------------Variant------------------------ */
- /* -----Builtin scalar----- */
- START_TEST(UA_Variant_Bool_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
-
- UA_Boolean *variantContent = UA_Boolean_new();
- *variantContent = true;
- UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_BOOLEAN]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":1,\"Body\":true}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_Number_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_UInt64 *variantContent = UA_UInt64_new();
- *variantContent = 345634563456;
- UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_UINT64]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":9,\"Body\":\"345634563456\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_Double_json_encode) {
- /* Encode decode cyle of 100 Doubles */
- UA_Double d = 0.0;
- for(size_t i = 0; i < 100; i++){
- d = nextafter(d,1);
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_Double *variantContent = UA_Double_new();
- //*variantContent = 1.0000000000000002;
- *variantContent = d;
- UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- //printf("%s\n\n", (char*)buf.data);
- UA_Variant out;
- UA_Variant_init(&out);
- retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_Double srcData = *((UA_Double*)src->data);
- UA_Double outData = *((UA_Double*)out.data);
- ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&out);
- UA_Variant_delete(src);
- }
- }
- END_TEST
- START_TEST(UA_Variant_Double2_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_Double *variantContent = UA_Double_new();
- *variantContent = (pow(2,53)-1)*pow(2,-1074);
- UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- //printf("%s\n\n", (char*)buf.data);
- /*{"Type":11,"Body":4.4501477170144022721148195934182639518696390927032912960468522194496444440421538910330590478162701758282983178260792422137401728773891892910553144148156412434867599762821265346585071045737627442980259622449029037796981144446145705102663115100318287949527959668236039986479250965780342141637013812613333119898765515451440315261253813266652951306000184917766328660755595837392240989947807556594098101021612198814605258742579179000071675999344145086087205681577915435923018910334964869420614052182892431445797605163650903606514140377217442262561590244668525767372446430075513332450079650686719491377688478005309963967709758965844137894433796621993967316936280457084866613206797017728916080020698679408551343728867675409720757232455434770912461317493580281734466552734375e-308}*/
- UA_Variant out;
- UA_Variant_init(&out);
- retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_Double srcData = *((UA_Double*)src->data);
- UA_Double outData = *((UA_Double*)out.data);
- ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&out);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_Double3_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_Double *variantContent = UA_Double_new();
- *variantContent = 1.1234;
- UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- UA_Variant out;
- UA_Variant_init(&out);
- retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_Double srcData = *((UA_Double*)src->data);
- UA_Double outData = *((UA_Double*)out.data);
- ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&out);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_DoubleInf_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_Double *variantContent = UA_Double_new();
- *variantContent = (UA_Double)INFINITY;
- UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- //printf("%s\n\n", (char*)buf.data);
- UA_Variant out;
- UA_Variant_init(&out);
- retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_Double srcData = *((UA_Double*)src->data);
- UA_Double outData = *((UA_Double*)out.data);
- ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&out);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_DoubleNan_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_Double *variantContent = UA_Double_new();
- *variantContent = (UA_Double)NAN;
- UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_DOUBLE]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- //printf("%s\n\n", (char*)buf.data);
- UA_Variant out;
- UA_Variant_init(&out);
- retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_Double srcData = *((UA_Double*)src->data);
- UA_Double outData = *((UA_Double*)out.data);
- ck_assert(memcmp(&srcData, &outData, sizeof(UA_Double)) == 0);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&out);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_Float_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_Float *variantContent = UA_Float_new();
- *variantContent = (UA_Float)((pow(2,23)-1)/pow(2,149));
- UA_Variant_setScalar(src, variantContent, &UA_TYPES[UA_TYPES_FLOAT]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status retval = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- UA_Variant out;
- UA_Variant_init(&out);
- retval |= UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_Float srcData = *((UA_Float*)src->data);
- UA_Float outData = *((UA_Float*)out.data);
- ck_assert(memcmp(&srcData, &outData, sizeof(UA_Float)) == 0);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&out);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_NodeId_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_NodeId variantContent = UA_NODEID_STRING(1, "theID");
- UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_NODEID]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":17,\"Body\":{\"IdType\":1,\"Id\":\"theID\",\"Namespace\":1}}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_LocText_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_LocalizedText variantContent;
- variantContent.locale = UA_STRING("localeString");
- variantContent.text = UA_STRING("textString");
- UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":21,\"Body\":{\"Locale\":\"localeString\",\"Text\":\"textString\"}}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_QualName_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_QualifiedName variantContent;
- UA_QualifiedName_init(&variantContent);
- variantContent.name = UA_STRING("derName");
- variantContent.namespaceIndex = 1;
-
- UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":20,\"Body\":{\"Name\":\"derName\",\"Uri\":1}}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- /* ---Reversible Variant Array---- */
- START_TEST(UA_Variant_Array_UInt16_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_UInt16 zero[2] = {42,43};
- UA_Variant_setArrayCopy(src, zero, 2, &UA_TYPES[UA_TYPES_UINT16]);
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- ck_assert_int_eq(size, 25);
-
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":5,\"Body\":[42,43]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_Array_Byte_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_Byte zero[2] = {42,43};
- UA_Variant_setArrayCopy(src, zero, 2, &UA_TYPES[UA_TYPES_BYTE]);
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":3,\"Body\":[42,43]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_Array_String_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_String zero[2] = {UA_STRING("eins"),UA_STRING("zwei")};
- UA_Variant_setArrayCopy(src, zero, 2, &UA_TYPES[UA_TYPES_STRING]);
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
-
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":12,\"Body\":[\"eins\",\"zwei\"]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_Matrix_UInt16_json_encode) {
- // Set an array value
- UA_Variant src;
- UA_Variant_init(&src);
- UA_UInt16 d[9] = {1, 2, 3,
- 4, 5, 6,
- 7, 8, 9};
- UA_Variant_setArrayCopy(&src, d, 9, &UA_TYPES[UA_TYPES_UINT16]);
- //Set array dimensions
- src.arrayDimensions = (UA_UInt32 *)UA_Array_new(2, &UA_TYPES[UA_TYPES_UINT32]);
- src.arrayDimensionsSize = 2;
- src.arrayDimensions[0] = 3;
- src.arrayDimensions[1] = 3;
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- //{"Type":5,"Body":[1,2,3,4,5,6,7,8,9],"Dimension":[3,3]}
- size_t sizeOfBytes = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- ck_assert_int_eq(sizeOfBytes, 55);
-
- status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":5,\"Body\":[1,2,3,4,5,6,7,8,9],\"Dimension\":[3,3]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&src);
- }
- END_TEST
- /* NON-Reversible builtin simple */
- START_TEST(UA_Variant_StatusCode_NonReversible_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_StatusCode variantContent = UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED;
- UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_STATUSCODE]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Body\":{\"Code\":2161770496,\"Symbol\":\"BadAggregateConfigurationRejected\"}}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- /* NON-Reversible Array */
- START_TEST(UA_Variant_Array_String_NonReversible_json_encode) {
- UA_Variant src;
- UA_Variant_init(&src);
- UA_String d[8] = {UA_STRING("1"), UA_STRING("2"), UA_STRING("3"),
- UA_STRING("4"), UA_STRING("5"), UA_STRING("6"),
- UA_STRING("7"), UA_STRING("8")};
- UA_Variant_setArrayCopy(&src, d, 8, &UA_TYPES[UA_TYPES_STRING]);
- src.arrayDimensions = (UA_UInt32 *)UA_Array_new(4, &UA_TYPES[UA_TYPES_UINT32]);
- src.arrayDimensionsSize = 1;
- src.arrayDimensions[0] = 8;
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Body\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\"]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&src);
- }
- END_TEST
- /* NON-Reversible Matrix */
- START_TEST(UA_Variant_Matrix_String_NonReversible_json_encode) {
- UA_Variant src;
- UA_Variant_init(&src);
- UA_String d[8] = {UA_STRING("1"), UA_STRING("2"), UA_STRING("3"),
- UA_STRING("4"), UA_STRING("5"), UA_STRING("6"),
- UA_STRING("7"), UA_STRING("8")};
- UA_Variant_setArrayCopy(&src, d, 8, &UA_TYPES[UA_TYPES_STRING]);
- src.arrayDimensions = (UA_UInt32 *)UA_Array_new(4, &UA_TYPES[UA_TYPES_UINT32]);
- src.arrayDimensionsSize = 4;
- src.arrayDimensions[0] = 2;
- src.arrayDimensions[1] = 2;
- src.arrayDimensions[2] = 2;
- src.arrayDimensions[3] = 1;
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- //{"Body":[[[["1"],["2"]],[["3"],["4"]]],[[["5"],["6"]],[["7"],["8"]]]]}
- size_t sizeOfBytes = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
- ck_assert_int_eq(sizeOfBytes, 70);
-
- status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Body\":[[[[\"1\"],[\"2\"]],[[\"3\"],[\"4\"]]],[[[\"5\"],[\"6\"]],[[\"7\"],[\"8\"]]]]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&src);
- }
- END_TEST
- START_TEST(UA_Variant_Matrix_NodeId_NonReversible_json_encode) {
- UA_Variant src;
- UA_Variant_init(&src);
- UA_NodeId d[8] = {UA_NODEID_NUMERIC(1,1),UA_NODEID_NUMERIC(1,2),UA_NODEID_NUMERIC(1,3),UA_NODEID_NUMERIC(1,4),UA_NODEID_NUMERIC(1,5),UA_NODEID_NUMERIC(1,6),UA_NODEID_NUMERIC(1,7),UA_NODEID_NUMERIC(1,8)};
- UA_Variant_setArrayCopy(&src, d, 8, &UA_TYPES[UA_TYPES_NODEID]);
- src.arrayDimensions = (UA_UInt32 *)UA_Array_new(4, &UA_TYPES[UA_TYPES_UINT32]);
- src.arrayDimensionsSize = 4;
- src.arrayDimensions[0] = 2;
- src.arrayDimensions[1] = 2;
- src.arrayDimensions[2] = 2;
- src.arrayDimensions[3] = 1;
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Body\":[[[[{\"Id\":1,\"Namespace\":1}],[{\"Id\":2,\"Namespace\":1}]],[[{\"Id\":3,\"Namespace\":1}],[{\"Id\":4,\"Namespace\":1}]]],[[[{\"Id\":5,\"Namespace\":1}],[{\"Id\":6,\"Namespace\":1}]],[[{\"Id\":7,\"Namespace\":1}],[{\"Id\":8,\"Namespace\":1}]]]]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&src);
- }
- END_TEST
- START_TEST(UA_Variant_Wrap_json_encode) {
- UA_Variant *src = UA_Variant_new();
- UA_Variant_init(src);
- UA_ViewDescription variantContent;
- UA_DateTime srvts = UA_DateTime_fromUnixTime(1234567);
- variantContent.timestamp = srvts;
- variantContent.viewVersion = 1236;
- variantContent.viewId = UA_NODEID_NUMERIC(0,99999);
-
- UA_Variant_setScalarCopy(src, &variantContent, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":22,\"Body\":{\"TypeId\":{\"Id\":511},\"Body\":{\"ViewId\":{\"Id\":99999},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1236}}}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_delete(src);
- }
- END_TEST
- START_TEST(UA_Variant_Wrap_Array_json_encode) {
- UA_Variant src;
- UA_Variant_init(&src);
- //src.arrayDimensions = (UA_UInt32 *)UA_Array_new(1, &UA_TYPES[UA_TYPES_UINT32]);
- //src.arrayDimensionsSize = 1;
- //src.arrayDimensions[0] = 2;
-
- UA_ViewDescription variantContent1;
- UA_DateTime srvts1 = UA_DateTime_fromUnixTime(1234567);
- variantContent1.timestamp = srvts1;
- variantContent1.viewVersion = 1;
- variantContent1.viewId = UA_NODEID_NUMERIC(0,1);
-
- UA_ViewDescription variantContent2;
- UA_DateTime srvts2 = UA_DateTime_fromUnixTime(1234567);
- variantContent2.timestamp = srvts2;
- variantContent2.viewVersion = 2;
- variantContent2.viewId = UA_NODEID_NUMERIC(0,2);
-
-
- UA_ViewDescription d[2] = {variantContent1, variantContent2};
- UA_Variant_setArrayCopy(&src, d, 2, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Type\":22,\"Body\":[{\"TypeId\":{\"Id\":511},\"Body\":{\"ViewId\":{\"Id\":1},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1}},{\"TypeId\":{\"Id\":511},\"Body\":{\"ViewId\":{\"Id\":2},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":2}}]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&src);
- }
- END_TEST
- START_TEST(UA_Variant_Wrap_Array_NonReversible_json_encode) {
- UA_Variant src;
- UA_Variant_init(&src);
- //src.arrayDimensions = (UA_UInt32 *)UA_Array_new(1, &UA_TYPES[UA_TYPES_UINT32]);
- //src.arrayDimensionsSize = 1;
- //src.arrayDimensions[0] = 2;
-
- UA_ViewDescription variantContent1;
- UA_DateTime srvts1 = UA_DateTime_fromUnixTime(1234567);
- variantContent1.timestamp = srvts1;
- variantContent1.viewVersion = 1;
- variantContent1.viewId = UA_NODEID_NUMERIC(1,1);
-
- UA_ViewDescription variantContent2;
- UA_DateTime srvts2 = UA_DateTime_fromUnixTime(1234567);
- variantContent2.timestamp = srvts2;
- variantContent2.viewVersion = 2;
- variantContent2.viewId = UA_NODEID_NUMERIC(1,2);
-
-
- UA_ViewDescription d[2] = {variantContent1, variantContent2};
- UA_Variant_setArrayCopy(&src, d, 2, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIANT];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson(&src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Body\":[{\"Body\":{\"ViewId\":{\"Id\":1,\"Namespace\":1},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1}},{\"Body\":{\"ViewId\":{\"Id\":2,\"Namespace\":1},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":2}}]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_Variant_deleteMembers(&src);
- }
- END_TEST
- /* -----------ExtensionObject------------------*/
- START_TEST(UA_ExtensionObject_json_encode) {
- UA_ExtensionObject *src = UA_ExtensionObject_new();
- UA_ExtensionObject_init(src);
- src->encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
- src->content.decoded.type = &UA_TYPES[UA_TYPES_BOOLEAN];
- UA_Boolean b = UA_FALSE;
- src->content.decoded.data = &b;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"TypeId\":{\"Id\":1},\"Body\":false}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ExtensionObject_delete(src);
- }
- END_TEST
- START_TEST(UA_ExtensionObject_xml_json_encode) {
- UA_ExtensionObject *src = UA_ExtensionObject_new();
- UA_ExtensionObject_init(src);
- src->encoding = UA_EXTENSIONOBJECT_ENCODED_XML;
- src->content.encoded.typeId = UA_NODEID_NUMERIC(2,1234);
- UA_ByteString b = UA_BYTESTRING_ALLOC("<Elemement></Element>");
- src->content.encoded.body = b;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"TypeId\":{\"Id\":1234,\"Namespace\":2},\"Encoding\":2,\"Body\":\"<Elemement></Element>\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ExtensionObject_delete(src);
- }
- END_TEST
- START_TEST(UA_ExtensionObject_byteString_json_encode) {
- UA_ExtensionObject *src = UA_ExtensionObject_new();
- UA_ExtensionObject_init(src);
- src->encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING;
- src->content.encoded.typeId = UA_NODEID_NUMERIC(2,1234);
- UA_ByteString b = UA_BYTESTRING_ALLOC("123456789012345678901234567890");
- src->content.encoded.body = b;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"TypeId\":{\"Id\":1234,\"Namespace\":2},\"Encoding\":1,\"Body\":\"123456789012345678901234567890\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ExtensionObject_delete(src);
- }
- END_TEST
- START_TEST(UA_ExtensionObject_NonReversible_StatusCode_json_encode) {
- UA_ExtensionObject *src = UA_ExtensionObject_new();
- UA_ExtensionObject_init(src);
- src->encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
- src->content.decoded.type = &UA_TYPES[UA_TYPES_STATUSCODE];
- UA_StatusCode b = UA_STATUSCODE_BADENCODINGERROR;
- src->content.decoded.data = &b;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Body\":{\"Code\":2147876864,\"Symbol\":\"BadEncodingError\"}}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ExtensionObject_delete(src);
- }
- END_TEST
- /* --------------ExpandedNodeId-------------------------- */
- START_TEST(UA_ExpandedNodeId_json_encode) {
- UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
- UA_ExpandedNodeId_init(src);
- *src = UA_EXPANDEDNODEID_STRING_ALLOC(23, "testtestTest");
- src->namespaceUri = UA_STRING_ALLOC("asdf");
- src->serverIndex = 1345;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":\"asdf\",\"ServerUri\":1345}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ExpandedNodeId_delete(src);
- }
- END_TEST
- START_TEST(UA_ExpandedNodeId_MissingNamespaceUri_json_encode) {
- UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
- UA_ExpandedNodeId_init(src);
- *src = UA_EXPANDEDNODEID_STRING_ALLOC(23, "testtestTest");
- src->namespaceUri = UA_STRING_NULL;
- src->serverIndex = 1345;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":23,\"ServerUri\":1345}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ExpandedNodeId_delete(src);
- }
- END_TEST
- START_TEST(UA_ExpandedNodeId_NonReversible_Ns1_json_encode) {
- UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
- UA_ExpandedNodeId_init(src);
- *src = UA_EXPANDEDNODEID_STRING_ALLOC(1, "testtestTest");
- src->namespaceUri = UA_STRING_NULL;
- src->serverIndex = 1;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
-
- UA_String serverUris[3] = {UA_STRING("uri0"),UA_STRING("uri1"),UA_STRING("uri2")};
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, serverUris, 3, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
-
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, serverUris, 3, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":1,\"ServerUri\":\"uri1\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ExpandedNodeId_delete(src);
- }
- END_TEST
- START_TEST(UA_ExpandedNodeId_NonReversible_Namespace_json_encode) {
- UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
- UA_ExpandedNodeId_init(src);
- *src = UA_EXPANDEDNODEID_STRING_ALLOC(2, "testtestTest");
- src->namespaceUri = UA_STRING_NULL;
- src->serverIndex = 1;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
-
- UA_String namespaces[3] = {UA_STRING("ns0"),UA_STRING("ns1"),UA_STRING("ns2")};
- UA_String serverUris[3] = {UA_STRING("uri0"),UA_STRING("uri1"),UA_STRING("uri2")};
-
- size_t size = UA_calcSizeJson((void *) src, type, namespaces, 3, serverUris, 3, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, namespaces, 3, serverUris, 3, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":\"ns2\",\"ServerUri\":\"uri1\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ExpandedNodeId_delete(src);
- }
- END_TEST
- START_TEST(UA_ExpandedNodeId_NonReversible_NamespaceUriGiven_json_encode) {
- UA_ExpandedNodeId *src = UA_ExpandedNodeId_new();
- UA_ExpandedNodeId_init(src);
- *src = UA_EXPANDEDNODEID_STRING_ALLOC(2, "testtestTest");
- src->namespaceUri = UA_STRING_ALLOC("NamespaceUri");
- src->serverIndex = 1;
-
- UA_String namespaces[3] = {UA_STRING("ns0"),UA_STRING("ns1"),UA_STRING("ns2")};
- UA_String serverUris[3] = {UA_STRING("uri0"),UA_STRING("uri1"),UA_STRING("uri2")};
-
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
- size_t size = UA_calcSizeJson((void *) src, type, namespaces, 3, serverUris, 3, UA_FALSE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, namespaces, 3, serverUris, 3, UA_FALSE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"IdType\":1,\"Id\":\"testtestTest\",\"Namespace\":\"NamespaceUri\",\"ServerUri\":\"uri1\"}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ExpandedNodeId_delete(src);
- }
- END_TEST
- /* -------------------------DataValue------------------------ */
- START_TEST(UA_DataValue_json_encode) {
- UA_DataValue *src = UA_DataValue_new();
- UA_DataValue_init(src);
- src->hasServerPicoseconds = UA_TRUE;
- src->hasServerTimestamp = UA_TRUE;
- src->hasSourcePicoseconds = UA_TRUE;
- src->hasSourceTimestamp = UA_TRUE;
- src->hasStatus = UA_TRUE;
- src->hasValue = UA_TRUE;
- UA_DateTime srcts = UA_DateTime_fromUnixTime(1234567) + 8901234;
- UA_DateTime srvts = UA_DateTime_fromUnixTime(2345678) + 9012345;
- src->sourceTimestamp = srcts;
- src->serverTimestamp = srvts;
- src->sourcePicoseconds = 5678;
- src->serverPicoseconds = 6789;
-
- UA_Variant variant;
- UA_Variant_init(&variant);
- UA_Boolean variantContent = true;
- UA_Variant_setScalarCopy(&variant, &variantContent, &UA_TYPES[UA_TYPES_BOOLEAN]);
- src->value = variant;
- src->status = UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DATAVALUE];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07.8901234Z\",\"SourcePicoseconds\":5678,\"ServerTimestamp\":\"1970-01-28T03:34:38.9012345Z\",\"ServerPicoseconds\":6789}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_DataValue_delete(src);
- }
- END_TEST
- START_TEST(UA_DataValue_null_json_encode) {
- UA_DataValue *src = UA_DataValue_new();
- UA_DataValue_init(src);
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_DATAVALUE];
- size_t size = UA_calcSizeJson((void *) src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "null";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_DataValue_delete(src);
- }
- END_TEST
- START_TEST(UA_MessageReadResponse_json_encode) {
- UA_ReadResponse src;
- UA_ReadResponse_init(&src);
- UA_DiagnosticInfo innerDiag;
- innerDiag.hasAdditionalInfo = UA_TRUE;
- innerDiag.additionalInfo = UA_STRING_ALLOC("INNER ADDITION INFO");
- innerDiag.hasInnerDiagnosticInfo = UA_FALSE;
- innerDiag.hasInnerStatusCode = UA_FALSE;
- innerDiag.hasLocale = UA_FALSE;
- innerDiag.hasSymbolicId = UA_FALSE;
- innerDiag.hasLocalizedText = UA_FALSE;
- innerDiag.hasNamespaceUri = UA_FALSE;
-
- UA_DiagnosticInfo *info = (UA_DiagnosticInfo*)UA_calloc(1, sizeof(UA_DiagnosticInfo));
- info[0] = innerDiag;
- src.diagnosticInfos = info;
- src.diagnosticInfosSize = 1;
-
- UA_DataValue dv;
- UA_DataValue_init(&dv);
- dv.hasServerPicoseconds = UA_TRUE;
- dv.hasServerTimestamp = UA_TRUE;
- dv.hasSourcePicoseconds = UA_TRUE;
- dv.hasSourceTimestamp = UA_TRUE;
- dv.hasStatus = UA_TRUE;
- dv.hasValue = UA_TRUE;
- UA_DateTime srcts = UA_DateTime_fromUnixTime(1234567);
- UA_DateTime srvts = UA_DateTime_fromUnixTime(1234567);
- dv.sourceTimestamp = srcts;
- dv.serverTimestamp = srvts;
- dv.sourcePicoseconds = 0;
- dv.serverPicoseconds = 0;
-
-
- UA_Variant variant;
- UA_Variant_init(&variant);
- UA_Boolean variantContent = true;
- UA_Variant_setScalarCopy(&variant, &variantContent, &UA_TYPES[UA_TYPES_BOOLEAN]);
- dv.value = variant;
- dv.status = UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID;
-
- UA_DataValue *values = (UA_DataValue*)UA_calloc(1, sizeof(UA_DataValue));
- values[0] = dv;
- src.results = values;
- src.resultsSize = 1;
-
-
- UA_ResponseHeader rh;
- UA_ResponseHeader_init(&rh);
- rh.stringTableSize = 0;
- rh.requestHandle = 123123;
- rh.serviceResult = UA_STATUSCODE_GOOD;
- rh.timestamp = UA_DateTime_fromUnixTime(1234567);
-
-
- UA_DiagnosticInfo serverDiag;
- UA_DiagnosticInfo_init(&serverDiag);
- serverDiag.hasAdditionalInfo = UA_TRUE;
- serverDiag.additionalInfo = UA_STRING_ALLOC("serverDiag");
- serverDiag.hasInnerDiagnosticInfo = UA_FALSE;
- serverDiag.hasInnerStatusCode = UA_FALSE;
- serverDiag.hasLocale = UA_FALSE;
- serverDiag.hasSymbolicId = UA_FALSE;
- serverDiag.hasLocalizedText = UA_FALSE;
- serverDiag.hasNamespaceUri = UA_FALSE;
- rh.serviceDiagnostics = serverDiag;
-
-
- UA_ExtensionObject e;
- UA_ExtensionObject_init(&e);
- e.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
- e.content.decoded.type = &UA_TYPES[UA_TYPES_BOOLEAN];
- UA_Boolean b = UA_FALSE;
- e.content.decoded.data = &b;
-
- rh.additionalHeader = e;
-
- src.responseHeader = rh;
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_READRESPONSE];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"ResponseHeader\":{\"Timestamp\":\"1970-01-15T06:56:07Z\",\"RequestHandle\":123123,\"ServiceResult\":0,\"ServiceDiagnostics\":{\"AdditionalInfo\":\"serverDiag\"},\"StringTable\":[],\"AdditionalHeader\":{\"TypeId\":{\"Id\":1},\"Body\":false}},\"Results\":[{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07Z\",\"ServerTimestamp\":\"1970-01-15T06:56:07Z\"}],\"DiagnosticInfos\":[{\"AdditionalInfo\":\"INNER ADDITION INFO\"}]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ReadResponse_deleteMembers(&src); //TODO
- }
- END_TEST
- START_TEST(UA_ViewDescription_json_encode) {
- UA_ViewDescription src;
- UA_ViewDescription_init(&src);
- UA_DateTime srvts = UA_DateTime_fromUnixTime(1234567);
- src.timestamp = srvts;
- src.viewVersion = 1236;
- src.viewId = UA_NODEID_NUMERIC(0,99999);
-
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VIEWDESCRIPTION];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"ViewId\":{\"Id\":99999},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1236}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_ViewDescription_deleteMembers(&src);
- }
- END_TEST
- START_TEST(UA_WriteRequest_json_encode) {
- UA_WriteRequest src;
- UA_WriteRequest_init(&src);
-
- UA_RequestHeader rh;
- rh.returnDiagnostics = 1;
- rh.auditEntryId = UA_STRING_ALLOC("Auditentryid");
- rh.requestHandle = 123123;
- rh.authenticationToken = UA_NODEID_STRING_ALLOC(0,"authToken");
- rh.timestamp = UA_DateTime_fromUnixTime(1234567);
- rh.timeoutHint = 120;
-
- UA_ExtensionObject e;
- UA_ExtensionObject_init(&e);
- e.encoding = UA_EXTENSIONOBJECT_DECODED_NODELETE;
- e.content.decoded.type = &UA_TYPES[UA_TYPES_BOOLEAN];
- UA_Boolean b = UA_FALSE;
- e.content.decoded.data = &b;
-
- rh.additionalHeader = e;
-
-
-
- UA_DataValue dv;
- UA_DataValue_init(&dv);
- dv.hasServerPicoseconds = UA_TRUE;
- dv.hasServerTimestamp = UA_TRUE;
- dv.hasSourcePicoseconds = UA_TRUE;
- dv.hasSourceTimestamp = UA_TRUE;
- dv.hasStatus = UA_TRUE;
- dv.hasValue = UA_TRUE;
- UA_DateTime srcts = UA_DateTime_fromUnixTime(1234567);
- UA_DateTime srvts = UA_DateTime_fromUnixTime(1234567);
- dv.sourceTimestamp = srcts;
- dv.serverTimestamp = srvts;
- dv.sourcePicoseconds = 0;
- dv.serverPicoseconds = 0;
-
- UA_Variant variant;
- UA_Variant_init(&variant);
- UA_Boolean variantContent = true;
- UA_Variant_setScalarCopy(&variant, &variantContent, &UA_TYPES[UA_TYPES_BOOLEAN]);
- dv.value = variant;
- dv.status = UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID;
-
- UA_DataValue dv2;
- UA_DataValue_init(&dv2);
- dv2.hasServerPicoseconds = UA_TRUE;
- dv2.hasServerTimestamp = UA_TRUE;
- dv2.hasSourcePicoseconds = UA_TRUE;
- dv2.hasSourceTimestamp = UA_TRUE;
- dv2.hasStatus = UA_TRUE;
- dv2.hasValue = UA_TRUE;
- UA_DateTime srcts2 = UA_DateTime_fromUnixTime(1234567);
- UA_DateTime srvts2 = UA_DateTime_fromUnixTime(1234567);
- dv2.sourceTimestamp = srcts2;
- dv2.serverTimestamp = srvts2;
- dv2.sourcePicoseconds = 0;
- dv2.serverPicoseconds = 0;
-
- UA_Variant variant2;
- UA_Variant_init(&variant2);
- UA_Boolean variantContent2 = true;
- UA_Variant_setScalarCopy(&variant2, &variantContent2, &UA_TYPES[UA_TYPES_BOOLEAN]);
- dv2.value = variant2;
- dv2.status = UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID;
-
- UA_WriteValue value;
- UA_WriteValue_init(&value);
- value.value = dv;
- value.attributeId = 12;
- value.indexRange = UA_STRING_ALLOC("BLOAB");
- value.nodeId = UA_NODEID_STRING_ALLOC(0, "a1111");
-
- UA_WriteValue value2;
- UA_WriteValue_init(&value2);
- value2.value = dv2;
- value2.attributeId = 12;
- value2.indexRange = UA_STRING_ALLOC("BLOAB");
- value2.nodeId = UA_NODEID_STRING_ALLOC(0, "a2222");
-
- UA_WriteValue *values = (UA_WriteValue*)UA_calloc(2,sizeof(UA_WriteValue));
- values[0] = value;
- values[1] = value2;
-
- src.nodesToWrite = values;
- src.nodesToWriteSize = 2;
- src.requestHeader = rh;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_WRITEREQUEST];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"RequestHeader\":{\"AuthenticationToken\":{\"IdType\":1,\"Id\":\"authToken\"},\"Timestamp\":\"1970-01-15T06:56:07Z\",\"RequestHandle\":123123,\"ReturnDiagnostics\":1,\"AuditEntryId\":\"Auditentryid\",\"TimeoutHint\":120,\"AdditionalHeader\":{\"TypeId\":{\"Id\":1},\"Body\":false}},\"NodesToWrite\":[{\"NodeId\":{\"IdType\":1,\"Id\":\"a1111\"},\"AttributeId\":12,\"IndexRange\":\"BLOAB\",\"Value\":{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07Z\",\"ServerTimestamp\":\"1970-01-15T06:56:07Z\"}},{\"NodeId\":{\"IdType\":1,\"Id\":\"a2222\"},\"AttributeId\":12,\"IndexRange\":\"BLOAB\",\"Value\":{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07Z\",\"ServerTimestamp\":\"1970-01-15T06:56:07Z\"}}]}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- UA_WriteRequest_deleteMembers(&src);
- }
- END_TEST
- START_TEST(UA_VariableAttributes_json_encode) {
- const UA_VariableTypeAttributes UA_VariableTypeAttributes_default = {
- 0, /* specifiedAttributes */
- {{0, NULL}, {0, NULL}}, /* displayName */
- {{0, NULL}, {0, NULL}}, /* description */
- 0, 0, /* writeMask (userWriteMask) */
- {NULL, UA_VARIANT_DATA, 0, NULL, 0, NULL}, /* value */
- {0, UA_NODEIDTYPE_NUMERIC, {0}}, /* dataType */
- UA_VALUERANK_ANY, /* valueRank */
- 0, NULL, /* arrayDimensions */
- true /* isAbstract */
- };
- UA_VariableTypeAttributes src = UA_VariableTypeAttributes_default;
- UA_Int32 myInteger = 42;
- UA_Variant_setScalar(&src.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]);
- src.description = UA_LOCALIZEDTEXT("en-US","the answer");
- src.displayName = UA_LOCALIZEDTEXT("en-US","the answer");
- src.dataType = UA_TYPES[UA_TYPES_INT32].typeId;
- const UA_DataType *type = &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES];
- size_t size = UA_calcSizeJson((void *) &src, type, NULL, 0, NULL, 0, UA_TRUE);
- UA_ByteString buf;
- UA_ByteString_allocBuffer(&buf, size+1);
- UA_Byte *bufPos = &buf.data[0];
- const UA_Byte *bufEnd = &buf.data[size+1];
- status s = UA_encodeJson((void *) &src, type, &bufPos, &bufEnd, NULL, 0, NULL, 0, UA_TRUE);
- *bufPos = 0;
- // then
- ck_assert_int_eq(s, UA_STATUSCODE_GOOD);
- char* result = "{\"SpecifiedAttributes\":0,"
- "\"DisplayName\":{\"Locale\":\"en-US\",\"Text\":\"the answer\"},"
- "\"Description\":{\"Locale\":\"en-US\",\"Text\":\"the answer\"},"
- "\"WriteMask\":0,\"UserWriteMask\":0,"
- "\"Value\":{\"Type\":6,\"Body\":42},"
- "\"DataType\":{\"Id\":6},\"ValueRank\":-2,"
- "\"ArrayDimensions\":[],"
- "\"IsAbstract\":true}";
- ck_assert_str_eq(result, (char*)buf.data);
- UA_ByteString_deleteMembers(&buf);
- }
- END_TEST
- // ---------------------------DECODE-------------------------------------
- START_TEST(UA_Byte_Min_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":3,\"Body\":0}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BYTE);
- ck_assert_uint_eq(*((UA_Byte*)out.data), 0);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Byte_Max_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":3,\"Body\":255}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BYTE);
- ck_assert_uint_eq(*((UA_Byte*)out.data), 255);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- /* ----UInt16---- */
- START_TEST(UA_UInt16_Min_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":5,\"Body\":0}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT16);
- ck_assert_uint_eq(*((UA_UInt16*)out.data), 0);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_UInt16_Max_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":5,\"Body\":65535}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT16);
- ck_assert_uint_eq(*((UA_UInt16*)out.data), 65535);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_UInt32_Min_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":7,\"Body\":0}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT32);
- ck_assert_uint_eq(*((UA_UInt32*)out.data), 0);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_UInt32_Max_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":7,\"Body\":4294967295}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT32);
- ck_assert_uint_eq(*((UA_UInt32*)out.data), 4294967295);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_UInt64_Min_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":9,\"Body\":\"0\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT64);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[6], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[7], 0x00);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_UInt64_Max_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":9,\"Body\":\"18446744073709551615\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_UINT64);
- ck_assert_int_eq(((u8*)(out.data))[0], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[1], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[2], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[3], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[4], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[5], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[6], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[7], 0xFF);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_UInt64_Overflow_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":9,\"Body\":\"18446744073709551616\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_SByte_Min_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":2,\"Body\":-128}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_SBYTE);
- ck_assert_int_eq(*((UA_SByte*)out.data), -128);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_SByte_Max_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":2,\"Body\":127}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_SBYTE);
- ck_assert_int_eq(*((UA_SByte*)out.data), 127);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Int16_Min_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":4,\"Body\":-32768}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT16);
- ck_assert_int_eq(*((UA_Int16*)out.data), -32768);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Int16_Max_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":4,\"Body\":32767}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT16);
- ck_assert_int_eq(*((UA_Int16*)out.data), 32767);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Int32_Min_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":6,\"Body\":-2147483648}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT32);
- ck_assert(*(UA_Int32*)out.data == -2147483648);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Int32_Max_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":6,\"Body\":2147483647}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT32);
- ck_assert_int_eq(*((UA_Int32*)out.data), 2147483647);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Int64_Min_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"-9223372036854775808\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT64);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[6], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[7], 0x80);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Int64_Max_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"9223372036854775807\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_INT64);
- ck_assert_int_eq(((u8*)(out.data))[0], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[1], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[2], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[3], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[4], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[5], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[6], 0xFF);
- ck_assert_int_eq(((u8*)(out.data))[7], 0x7F);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Int64_Overflow_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"9223372036854775808\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Int64_TooBig_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"111111111111111111111111111111\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Int64_NoDigit_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":8,\"Body\":\"a\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Float_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":3.1415927410}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- //0 10000000 10010010000111111011011 = 40 49 0f db
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0xdb);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x0f);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x49);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x40);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Float_json_one_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":1}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- //0 01111111 00000000000000000000000 = 3f80 0000
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x3f);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Float_json_inf_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":\"Infinity\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x7f);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Float_json_neginf_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":\"-Infinity\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- //0 01111111 00000000000000000000000 = 3f80 0000
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
- ck_assert_int_eq(((u8*)(out.data))[3], 0xff);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Float_json_nan_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":\"NaN\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- //0 01111111 00000000000000000000000 = 3f80 0000
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- //ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- //ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- //ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
- //ck_assert_int_eq(((u8*)(out.data))[3], 0x3f);
- UA_Float val = *((UA_Float*)out.data);
- ck_assert(val != val);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Float_json_negnan_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":10,\"Body\":\"-NaN\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- //0 01111111 00000000000000000000000 = 3f80 0000
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- //ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- //ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- //ck_assert_int_eq(((u8*)(out.data))[2], 0x80);
- //ck_assert_int_eq(((u8*)(out.data))[3], 0x3f);
- UA_Float val = *((UA_Float*)out.data);
- ck_assert(val != val); /* check if not a number */
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1.1234}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0xef);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x38);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x45);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x47);
- ck_assert_int_eq(((u8*)(out.data))[4], 0x72);
- ck_assert_int_eq(((u8*)(out.data))[5], 0xf9);
- ck_assert_int_eq(((u8*)(out.data))[6], 0xf1);
- ck_assert_int_eq(((u8*)(out.data))[7], 0x3f);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_corrupt_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1.12.34}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_one_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- //UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1}");
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- // 0 01111111111 0000000000000000000000000000000000000000000000000000
- // 3FF0000000000000
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[6], 0xF0);
- ck_assert_int_eq(((u8*)(out.data))[7], 0x3F);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_onepointsmallest_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":1.0000000000000002}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- // 0 01111111111 0000000000000000000000000000000000000000000000000001
- // 3FF0000000000001
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x01);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[6], 0xF0);
- ck_assert_int_eq(((u8*)(out.data))[7], 0x3F);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_nan_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":\"NaN\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_Double val = *((UA_Double*)out.data);
- ck_assert(val != val); /* check if not a number */
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_negnan_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":\"-NaN\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_Double val = *((UA_Double*)out.data);
- ck_assert(val != val); /* check if not a number */
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_inf_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":\"Infinity\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- // 0 111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[6], 0xF0);
- ck_assert_int_eq(((u8*)(out.data))[7], 0x7F);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_neginf_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":\"-Infinity\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- // 1 111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[6], 0xF0);
- ck_assert_int_eq(((u8*)(out.data))[7], 0xFF);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_zero_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":0}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- // 0 000 0000 0000 0000 0000 0000 00000000 00000000 00000000 00000000 00000000
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[6], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[7], 0x00);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Double_negzero_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":-0}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- // 1 000 0000 0000 0000 00000000 00000000 00000000 00000000 00000000 00000000
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(((u8*)(out.data))[0], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[1], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[2], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[3], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[4], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[5], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[6], 0x00);
- ck_assert_int_eq(((u8*)(out.data))[7], 0x80);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_String_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"abcdef\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
- ck_assert_int_eq( ((UA_String*)out.data)->length, 6);
- ck_assert_int_eq( ((UA_String*)out.data)->data[0], 'a');
- ck_assert_int_eq(((UA_String*)out.data)->data[1], 'b');
- ck_assert_int_eq(((UA_String*)out.data)->data[2], 'c');
- ck_assert_int_eq(((UA_String*)out.data)->data[3], 'd');
- ck_assert_int_eq(((UA_String*)out.data)->data[4], 'e');
- ck_assert_int_eq(((UA_String*)out.data)->data[5], 'f');
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_String_empty_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
- ck_assert_int_eq( ((UA_String*)out.data)->length, 0);
- ck_assert_ptr_eq( ((UA_String*)out.data)->data, UA_EMPTY_ARRAY_SENTINEL);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_String_unescapeBS_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"ab\\tcdef\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
- ck_assert_int_eq( ((UA_String*)out.data)->length, 7);
- ck_assert_int_eq( ((UA_String*)out.data)->data[0], 'a');
- ck_assert_int_eq(((UA_String*)out.data)->data[1], 'b');
- ck_assert_int_eq(((UA_String*)out.data)->data[2], '\t');
- ck_assert_int_eq(((UA_String*)out.data)->data[3], 'c');
- ck_assert_int_eq(((UA_String*)out.data)->data[4], 'd');
- ck_assert_int_eq(((UA_String*)out.data)->data[5], 'e');
- ck_assert_int_eq(((UA_String*)out.data)->data[6], 'f');
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_String_escape_unicode_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"\\u002c\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
- ck_assert_int_eq( ((UA_String*)out.data)->length, 1);
- ck_assert_int_eq( ((UA_String*)out.data)->data[0], ',');
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_String_escape2_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"\\b\\th\\\"e\\fl\\nl\\\\o\\r\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
- ck_assert_int_eq( ((UA_String*)out.data)->length, 12);// \b\th\"e\fl\nl\\o\r
- ck_assert_int_eq( ((UA_String*)out.data)->data[0], '\b');
- ck_assert_int_eq( ((UA_String*)out.data)->data[1], '\t');
- ck_assert_int_eq( ((UA_String*)out.data)->data[2], 'h');
- ck_assert_int_eq( ((UA_String*)out.data)->data[3], '\"');
- ck_assert_int_eq( ((UA_String*)out.data)->data[4], 'e');
- ck_assert_int_eq( ((UA_String*)out.data)->data[5], '\f');
- ck_assert_int_eq( ((UA_String*)out.data)->data[6], 'l');
- ck_assert_int_eq( ((UA_String*)out.data)->data[7], '\n');
- ck_assert_int_eq( ((UA_String*)out.data)->data[8], 'l');
- ck_assert_int_eq( ((UA_String*)out.data)->data[9], '\\');
- ck_assert_int_eq( ((UA_String*)out.data)->data[10], 'o');
- ck_assert_int_eq( ((UA_String*)out.data)->data[11], '\r');
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_String_surrogatePair_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":\"\\uD800\\uDC00\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
- ck_assert_int_eq( ((UA_String*)out.data)->length, 4);//U+10000 => 0xF0 0x90 0x80 0x80
- ck_assert_uint_eq( ((UA_String*)out.data)->data[0], 0xF0);
- ck_assert_uint_eq( ((UA_String*)out.data)->data[1], 0x90);
- ck_assert_uint_eq( ((UA_String*)out.data)->data[2], 0x80);
- ck_assert_uint_eq( ((UA_String*)out.data)->data[3], 0x80);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- /* ---------------ByteString---------------------------*/
- START_TEST(UA_ByteString_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":15,\"Body\":\"YXNkZmFzZGY=\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BYTESTRING);
- ck_assert_int_eq(((UA_ByteString*)out.data)->length, 8);
- ck_assert_int_eq(((UA_ByteString*)out.data)->data[0], 'a');
- ck_assert_int_eq(((UA_ByteString*)out.data)->data[1], 's');
- ck_assert_int_eq(((UA_ByteString*)out.data)->data[2], 'd');
- ck_assert_int_eq(((UA_ByteString*)out.data)->data[3], 'f');
- ck_assert_int_eq(((UA_ByteString*)out.data)->data[4], 'a');
- ck_assert_int_eq(((UA_ByteString*)out.data)->data[5], 's');
- ck_assert_int_eq(((UA_ByteString*)out.data)->data[6], 'd');
- ck_assert_int_eq(((UA_ByteString*)out.data)->data[7], 'f');
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ByteString_bad_json_decode) {
- UA_ByteString out;
- UA_ByteString_init(&out);
- UA_ByteString buf = UA_STRING("\"\x90!\xc5 c{\",");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_BYTESTRING]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_ByteString_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ByteString_null_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":15,\"Body\":null}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BYTESTRING);
- ck_assert_ptr_eq(out.data, NULL);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- /* ---------GUID--------------------------- */
- START_TEST(UA_Guid_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000001-0002-0003-0405-060708090A0B\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_GUID);
- ck_assert_int_eq(((UA_Guid*)out.data)->data1, 1);
- ck_assert_int_eq(((UA_Guid*)out.data)->data2, 2);
- ck_assert_int_eq(((UA_Guid*)out.data)->data3, 3);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[0], 4);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[1], 5);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[2], 6);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[3], 7);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[4], 8);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[5], 9);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[6], 10);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[7], 11);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Guid_lower_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000001-0002-0003-0405-060708090a0b\"}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_GUID);
- ck_assert_int_eq(((UA_Guid*)out.data)->data1, 1);
- ck_assert_int_eq(((UA_Guid*)out.data)->data2, 2);
- ck_assert_int_eq(((UA_Guid*)out.data)->data3, 3);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[0], 4);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[1], 5);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[2], 6);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[3], 7);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[4], 8);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[5], 9);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[6], 10);
- ck_assert_int_eq(((UA_Guid*)out.data)->data4[7], 11);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Guid_tooShort_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000001-00\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Guid_tooLong_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000001-0002-0003-0405-060708090A0B00000001\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Guid_wrong_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":14,\"Body\":\"00000=01-0002-0003-0405-060708090A0B\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- /* ------Statuscode----------- */
- START_TEST(UA_StatusCode_2_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":19,\"Body\":2}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STATUSCODE);
- ck_assert_uint_eq(*((UA_StatusCode*)out.data), 2);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_StatusCode_3_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":19,\"Body\":222222222222222222222222222222222222}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_StatusCode_0_json_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":19,\"Body\":0}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STATUSCODE);
- ck_assert_uint_eq(*((UA_StatusCode*)out.data), 0);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- /* ----------DateTime---------------- */
- START_TEST(UA_DateTime_json_decode) {
- // given
- UA_DateTime out;
- UA_DateTime_init(&out);
- UA_ByteString buf = UA_STRING("\"1970-01-02T01:02:03.005Z\"");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATETIME]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_DateTimeStruct dts = UA_DateTime_toStruct(out);
- ck_assert_int_eq(dts.year, 1970);
- ck_assert_int_eq(dts.month, 1);
- ck_assert_int_eq(dts.day, 2);
- ck_assert_int_eq(dts.hour, 1);
- ck_assert_int_eq(dts.min, 2);
- ck_assert_int_eq(dts.sec, 3);
- ck_assert_int_eq(dts.milliSec, 5);
- ck_assert_int_eq(dts.microSec, 0);
- ck_assert_int_eq(dts.nanoSec, 0);
-
- UA_DateTime_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_DateTime_micro_json_decode) {
- // given
- UA_DateTime out;
- UA_DateTime_init(&out);
- UA_ByteString buf = UA_STRING("\"1970-01-02T01:02:03.042Z\"");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATETIME]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- UA_DateTimeStruct dts = UA_DateTime_toStruct(out);
- ck_assert_int_eq(dts.year, 1970);
- ck_assert_int_eq(dts.month, 1);
- ck_assert_int_eq(dts.day, 2);
- ck_assert_int_eq(dts.hour, 1);
- ck_assert_int_eq(dts.min, 2);
- ck_assert_int_eq(dts.sec, 3);
- ck_assert_int_eq(dts.milliSec, 42);
- ck_assert_int_eq(dts.microSec, 0);
- ck_assert_int_eq(dts.nanoSec, 0);
-
- UA_DateTime_deleteMembers(&out);
- }
- END_TEST
- /* ---------------QualifiedName----------------------- */
- START_TEST(UA_QualifiedName_json_decode) {
- // given
- UA_QualifiedName out;
- UA_QualifiedName_init(&out);
- UA_ByteString buf = UA_STRING("{\"Name\":\"derName\",\"Uri\":1}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.name.length, 7);
- ck_assert_int_eq(out.name.data[1], 'e');
- ck_assert_int_eq(out.name.data[6], 'e');
- ck_assert_int_eq(out.namespaceIndex, 1);
-
- UA_QualifiedName_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_QualifiedName_null_json_decode) {
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":20,\"Body\":null}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_QUALIFIEDNAME);
- ck_assert_ptr_eq(out.data, NULL);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- /* --------LocalizedText------------ */
- START_TEST(UA_LocalizedText_json_decode) {
- // given
- UA_LocalizedText out;
- UA_LocalizedText_init(&out);
- UA_ByteString buf = UA_STRING("{\"Locale\":\"t1\",\"Text\":\"t2\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.locale.data[0], 't');
- ck_assert_int_eq(out.text.data[0], 't');
- ck_assert_int_eq(out.locale.data[1], '1');
- ck_assert_int_eq(out.text.data[1], '2');
-
- UA_LocalizedText_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_LocalizedText_missing_json_decode) {
- // given
- UA_LocalizedText out;
- UA_LocalizedText_init(&out);
- UA_ByteString buf = UA_STRING("{\"Locale\":\"t1\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.locale.length, 2);
- ck_assert_int_eq(out.locale.data[0], 't');
- ck_assert_int_eq(out.locale.data[1], '1');
- ck_assert_ptr_eq(out.text.data, NULL);
- ck_assert_int_eq(out.text.length, 0);
-
- UA_LocalizedText_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_LocalizedText_null_json_decode) {
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":21,\"Body\":null}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_LOCALIZEDTEXT);
- ck_assert_ptr_eq(out.data, NULL);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ViewDescription_json_decode) {
- // given
- UA_ViewDescription out;
- UA_ViewDescription_init(&out);
- UA_ByteString buf = UA_STRING("{\"Timestamp\":\"1970-01-15T06:56:07Z\",\"ViewVersion\":1236,\"ViewId\":{\"Id\":\"00000009-0002-027C-F3BF-BB7BEEFEEFBE\",\"IdType\":2}}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VIEWDESCRIPTION]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.viewVersion, 1236);
- ck_assert_int_eq(out.viewId.identifierType, UA_NODEIDTYPE_GUID);
- UA_DateTimeStruct dts = UA_DateTime_toStruct(out.timestamp);
- ck_assert_int_eq(dts.year, 1970);
- ck_assert_int_eq(dts.month, 1);
- ck_assert_int_eq(dts.day, 15);
- ck_assert_int_eq(dts.hour, 6);
- ck_assert_int_eq(dts.min, 56);
- ck_assert_int_eq(dts.sec, 7);
- ck_assert_int_eq(dts.milliSec, 0);
- ck_assert_int_eq(dts.microSec, 0);
- ck_assert_int_eq(dts.nanoSec, 0);
- ck_assert_int_eq(out.viewId.identifier.guid.data1, 9);
- ck_assert_int_eq(out.viewId.identifier.guid.data2, 2);
-
- UA_ViewDescription_deleteMembers(&out);
- }
- END_TEST
- /* -----------------NodeId----------------------------- */
- START_TEST(UA_NodeId_Nummeric_json_decode) {
- // given
- UA_NodeId out;
- UA_NodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"Id\":42}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.identifier.numeric, 42);
- ck_assert_int_eq(out.namespaceIndex, 0);
- ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_NUMERIC);
-
- UA_NodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_NodeId_Nummeric_Namespace_json_decode) {
- // given
- UA_NodeId out;
- UA_NodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"Id\":42,\"Namespace\":123}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.identifier.numeric, 42);
- ck_assert_int_eq(out.namespaceIndex, 123);
- ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_NUMERIC);
-
- UA_NodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_NodeId_String_json_decode) {
- // given
- UA_NodeId out;
- UA_NodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test123\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.identifier.string.length, 7);
- ck_assert_int_eq(out.identifier.string.data[0], 't');
- ck_assert_int_eq(out.identifier.string.data[1], 'e');
- ck_assert_int_eq(out.identifier.string.data[2], 's');
- ck_assert_int_eq(out.identifier.string.data[3], 't');
- ck_assert_int_eq(out.identifier.string.data[4], '1');
- ck_assert_int_eq(out.identifier.string.data[5], '2');
- ck_assert_int_eq(out.identifier.string.data[6], '3');
- ck_assert_int_eq(out.namespaceIndex, 0);
- ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_STRING);
-
- UA_NodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_NodeId_Guid_json_decode) {
- // given
- UA_NodeId out;
- UA_NodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"IdType\":2,\"Id\":\"00000001-0002-0003-0405-060708090A0B\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.namespaceIndex, 0);
- ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_GUID);
- ck_assert_int_eq(out.identifier.guid.data1, 1);
- ck_assert_int_eq(out.identifier.guid.data2, 2);
- ck_assert_int_eq(out.identifier.guid.data3, 3);
- ck_assert_int_eq(out.identifier.guid.data4[0], 4);
- ck_assert_int_eq(out.identifier.guid.data4[1], 5);
- ck_assert_int_eq(out.identifier.guid.data4[2], 6);
- ck_assert_int_eq(out.identifier.guid.data4[3], 7);
- ck_assert_int_eq(out.identifier.guid.data4[4], 8);
- ck_assert_int_eq(out.identifier.guid.data4[5], 9);
- ck_assert_int_eq(out.identifier.guid.data4[6], 10);
- ck_assert_int_eq(out.identifier.guid.data4[7], 11);
-
- UA_NodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_NodeId_ByteString_json_decode) {
- // given
- UA_NodeId out;
- UA_NodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"IdType\":3,\"Id\":\"YXNkZmFzZGY=\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_NODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.namespaceIndex, 0);
- ck_assert_int_eq(out.identifierType, UA_NODEIDTYPE_BYTESTRING);
- ck_assert_int_eq(out.identifier.byteString.length, 8);
- ck_assert_int_eq(out.identifier.byteString.data[0], 'a');
- ck_assert_int_eq(out.identifier.byteString.data[1], 's');
- ck_assert_int_eq(out.identifier.byteString.data[2], 'd');
- ck_assert_int_eq(out.identifier.byteString.data[3], 'f');
- ck_assert_int_eq(out.identifier.byteString.data[4], 'a');
- ck_assert_int_eq(out.identifier.byteString.data[5], 's');
- ck_assert_int_eq(out.identifier.byteString.data[6], 'd');
- ck_assert_int_eq(out.identifier.byteString.data[7], 'f');
-
- UA_NodeId_deleteMembers(&out);
- }
- END_TEST
- /* -----------------------ExpandedNodeId---------------------------*/
- START_TEST(UA_ExpandedNodeId_Nummeric_json_decode) {
- // given
- UA_ExpandedNodeId out;
- UA_ExpandedNodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"Id\":42}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.nodeId.identifier.numeric, 42);
- ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_NUMERIC);
- ck_assert_ptr_eq(out.namespaceUri.data, NULL);
- ck_assert_int_eq(out.namespaceUri.length, 0);
- ck_assert_int_eq(out.serverIndex, 0);
-
- UA_ExpandedNodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ExpandedNodeId_String_json_decode) {
- // given
- UA_ExpandedNodeId out;
- UA_ExpandedNodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.nodeId.identifier.string.length, 4);
- ck_assert_int_eq(out.nodeId.identifier.string.data[0], 't');
- ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_STRING);
- ck_assert_ptr_eq(out.namespaceUri.data, NULL);
- ck_assert_int_eq(out.namespaceUri.length, 0);
- ck_assert_int_eq(out.serverIndex, 0);
-
- UA_ExpandedNodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ExpandedNodeId_String_Namespace_json_decode) {
- // given
- UA_ExpandedNodeId out;
- UA_ExpandedNodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test\",\"Namespace\":\"abcdef\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.nodeId.identifier.string.length, 4);
- ck_assert_int_eq(out.nodeId.identifier.string.data[0], 't');
- ck_assert_int_eq(out.nodeId.identifier.string.data[1], 'e');
- ck_assert_int_eq(out.nodeId.identifier.string.data[2], 's');
- ck_assert_int_eq(out.nodeId.identifier.string.data[3], 't');
- ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_STRING);
- ck_assert_int_eq(out.namespaceUri.length, 6);
- ck_assert_int_eq(out.namespaceUri.data[0], 'a');
- ck_assert_int_eq(out.namespaceUri.data[1], 'b');
- ck_assert_int_eq(out.namespaceUri.data[2], 'c');
- ck_assert_int_eq(out.namespaceUri.data[3], 'd');
- ck_assert_int_eq(out.namespaceUri.data[4], 'e');
- ck_assert_int_eq(out.namespaceUri.data[5], 'f');
- ck_assert_int_eq(out.serverIndex, 0);
-
- UA_ExpandedNodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ExpandedNodeId_String_NamespaceAsIndex_json_decode) {
- // given
- UA_ExpandedNodeId out;
- UA_ExpandedNodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test\",\"Namespace\":42}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.nodeId.identifier.string.length, 4);
- ck_assert_int_eq(out.nodeId.identifier.string.data[0], 't');
- ck_assert_int_eq(out.nodeId.identifier.string.data[1], 'e');
- ck_assert_int_eq(out.nodeId.identifier.string.data[2], 's');
- ck_assert_int_eq(out.nodeId.identifier.string.data[3], 't');
- ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_STRING);
- ck_assert_int_eq(out.namespaceUri.length, 0);
- ck_assert_ptr_eq(out.namespaceUri.data, NULL);
- ck_assert_int_eq(out.nodeId.namespaceIndex, 42);
- ck_assert_int_eq(out.serverIndex, 0);
-
- UA_ExpandedNodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ExpandedNodeId_String_Namespace_ServerUri_json_decode) {
- // given
- UA_ExpandedNodeId out;
- UA_ExpandedNodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"IdType\":1,\"Id\":\"test\",\"Namespace\":\"test\",\"ServerUri\":13}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.nodeId.identifier.string.length, 4);
- ck_assert_int_eq(out.nodeId.identifier.string.data[0], 't');
- ck_assert_int_eq(out.nodeId.identifier.string.data[1], 'e');
- ck_assert_int_eq(out.nodeId.identifier.string.data[2], 's');
- ck_assert_int_eq(out.nodeId.identifier.string.data[3], 't');
- ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_STRING);
- ck_assert_int_eq(out.serverIndex, 13);
- ck_assert_int_eq(out.namespaceUri.data[0], 't');
- ck_assert_int_eq(out.namespaceUri.data[1], 'e');
- ck_assert_int_eq(out.namespaceUri.data[2], 's');
- ck_assert_int_eq(out.namespaceUri.data[3], 't');
-
- UA_ExpandedNodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ExpandedNodeId_ByteString_json_decode) {
- // given
- UA_ExpandedNodeId out;
- UA_ExpandedNodeId_init(&out);
- UA_ByteString buf = UA_STRING("{\"IdType\":3,\"Id\":\"YXNkZmFzZGY=\",\"Namespace\":\"test\",\"ServerUri\":13}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.nodeId.identifier.string.length, 8);
- ck_assert_int_eq(out.nodeId.identifier.string.data[0], 'a');
- ck_assert_int_eq(out.nodeId.identifier.string.data[1], 's');
- ck_assert_int_eq(out.nodeId.identifier.string.data[2], 'd');
- ck_assert_int_eq(out.nodeId.identifier.string.data[3], 'f');
- ck_assert_int_eq(out.nodeId.identifier.string.data[4], 'a');
- ck_assert_int_eq(out.nodeId.identifier.string.data[5], 's');
- ck_assert_int_eq(out.nodeId.identifier.string.data[6], 'd');
- ck_assert_int_eq(out.nodeId.identifier.string.data[7], 'f');
- ck_assert_int_eq(out.nodeId.identifierType, UA_NODEIDTYPE_BYTESTRING);
- ck_assert_int_eq(out.serverIndex, 13);
- ck_assert_int_eq(out.namespaceUri.data[0], 't');
- ck_assert_int_eq(out.namespaceUri.data[1], 'e');
- ck_assert_int_eq(out.namespaceUri.data[2], 's');
- ck_assert_int_eq(out.namespaceUri.data[3], 't');
-
- UA_ExpandedNodeId_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_DiagnosticInfo_json_decode) {
- // given
-
- UA_DiagnosticInfo out;
- UA_DiagnosticInfo_init(&out);
- out.innerDiagnosticInfo = NULL;
- UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,"
- "\"LocalizedText\":14,"
- "\"Locale\":12,"
- "\"AdditionalInfo\":\"additionalInfo\","
- "\"InnerStatusCode\":2155216896,"
- "\"InnerDiagnosticInfo\":{\"AdditionalInfo\":\"INNER ADDITION INFO\"}}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DIAGNOSTICINFO]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.locale, 12);
- ck_assert_int_eq(out.symbolicId, 13);
- ck_assert_int_eq(out.localizedText, 14);
- ck_assert_int_eq(out.innerStatusCode, 2155216896);
- ck_assert_int_eq(out.additionalInfo.length, 14);
- ck_assert_int_eq(out.innerDiagnosticInfo->additionalInfo.length, 19);
- UA_DiagnosticInfo_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_DiagnosticInfo_null_json_decode) {
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":25,\"Body\":null}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_DIAGNOSTICINFO);
- ck_assert_ptr_eq(out.data, NULL);
-
- //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasAdditionalInfo, 0);
- //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasInnerDiagnosticInfo, 0);
- //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasInnerStatusCode, 0);
- //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasLocale, 0);
- //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasLocalizedText, 0);
- //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasNamespaceUri, 0);
- //ck_assert_uint_eq(((UA_DiagnosticInfo*)out.data)->hasSymbolicId, 0);
-
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- /* --------------------DataValue--------------------------- */
- START_TEST(UA_DataValue_json_decode) {
- // given
-
- UA_DataValue out;
- UA_DataValue_init(&out);
- UA_ByteString buf = UA_STRING("{\"Value\":{\"Type\":1,\"Body\":true},\"Status\":2153250816,\"SourceTimestamp\":\"1970-01-15T06:56:07Z\",\"SourcePicoseconds\":0,\"ServerTimestamp\":\"1970-01-15T06:56:07Z\",\"ServerPicoseconds\":0}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATAVALUE]);
- //UA_DiagnosticInfo inner = *out.innerDiagnosticInfo;
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.hasStatus, 1);
- ck_assert_int_eq(out.hasServerPicoseconds, 1);
- ck_assert_int_eq(out.hasServerTimestamp, 1);
- ck_assert_int_eq(out.hasSourcePicoseconds, 1);
- ck_assert_int_eq(out.hasSourceTimestamp, 1);
- ck_assert_int_eq(out.hasValue, 1);
- ck_assert_int_eq(out.status, 2153250816);
- ck_assert_int_eq(out.value.type->typeIndex, 0);
- ck_assert_int_eq((*((UA_Boolean*)out.value.data)), 1);
- UA_DataValue_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_DataValueMissingFields_json_decode) {
- // given
-
- UA_DataValue out;
- UA_DataValue_init(&out);
- UA_ByteString buf = UA_STRING("{\"Value\":{\"Type\":1,\"Body\":true}}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATAVALUE]);
- //UA_DiagnosticInfo inner = *out.innerDiagnosticInfo;
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.hasStatus, 0);
- ck_assert_int_eq(out.hasServerPicoseconds, 0);
- ck_assert_int_eq(out.hasServerTimestamp, 0);
- ck_assert_int_eq(out.hasSourcePicoseconds, 0);
- ck_assert_int_eq(out.hasSourceTimestamp, 0);
- ck_assert_int_eq(out.hasValue, 1);
- UA_DataValue_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_DataValue_null_json_decode) {
- // given
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":23,\"Body\":null}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- //UA_DiagnosticInfo inner = *out.innerDiagnosticInfo;
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_ptr_eq(out.data, NULL);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- /*----------------------ExtensionObject------------------------*/
- START_TEST(UA_ExtensionObject_json_decode) {
- // given
-
- UA_ExtensionObject out;
- UA_ExtensionObject_init(&out);
- UA_ByteString buf = UA_STRING("{\"TypeId\":{\"Id\":1},\"Body\":true}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.encoding, UA_EXTENSIONOBJECT_DECODED);
- ck_assert_int_eq(*((UA_Boolean*)out.content.decoded.data), UA_TRUE);
- ck_assert_int_eq(out.content.decoded.type->typeIndex, UA_TYPES_BOOLEAN);
- UA_ExtensionObject_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ExtensionObject_EncodedByteString_json_decode) {
- // given
-
- UA_ExtensionObject out;
- UA_ExtensionObject_init(&out);
- UA_ByteString buf = UA_STRING("{\"Encoding\":1,\"TypeId\":{\"Id\":42},\"Body\":\"YXNkZmFzZGY=\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.encoding, UA_EXTENSIONOBJECT_ENCODED_BYTESTRING);
- //TODO: Not base64 decoded, correct?
- ck_assert_int_eq(out.content.encoded.body.data[0], 'Y');
- ck_assert_int_eq(out.content.encoded.body.data[0], 'Y');
- ck_assert_int_eq(out.content.encoded.body.data[1], 'X');
- ck_assert_int_eq(out.content.encoded.body.data[2], 'N');
- ck_assert_int_eq(out.content.encoded.body.data[3], 'k');
- ck_assert_int_eq(out.content.encoded.body.data[4], 'Z');
- ck_assert_int_eq(out.content.encoded.body.data[5], 'm');
- ck_assert_int_eq(out.content.encoded.body.data[6], 'F');
- ck_assert_int_eq(out.content.encoded.typeId.identifier.numeric, 42);
-
- UA_ExtensionObject_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ExtensionObject_EncodedXml_json_decode) {
- // given
-
- UA_ExtensionObject out;
- UA_ExtensionObject_init(&out);
- UA_ByteString buf = UA_STRING("{\"Encoding\":2,\"TypeId\":{\"Id\":42},\"Body\":\"<Element></Element>\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.encoding, UA_EXTENSIONOBJECT_ENCODED_XML);
- ck_assert_int_eq(out.content.encoded.body.data[0], '<');
- ck_assert_int_eq(out.content.encoded.body.data[1], 'E');
- ck_assert_int_eq(out.content.encoded.body.data[2], 'l');
- ck_assert_int_eq(out.content.encoded.body.data[3], 'e');
- ck_assert_int_eq(out.content.encoded.typeId.identifier.numeric, 42);
- UA_ExtensionObject_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_ExtensionObject_Unkown_json_decode) {
- // given
-
- UA_ExtensionObject out;
- UA_ExtensionObject_init(&out);
- UA_ByteString buf = UA_STRING("{\"TypeId\":{\"Id\":4711},\"Body\":{\"unknown\":\"body\",\"saveas\":\"Bytestring\"}}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.encoding, UA_EXTENSIONOBJECT_ENCODED_BYTESTRING);
- ck_assert_int_eq(out.content.encoded.typeId.identifier.numeric, 4711);
-
- //{"unknown":"body","saveas":"Bytestring"}Q
- ck_assert_int_eq(out.content.encoded.body.length, 40);
- ck_assert_int_eq(out.content.encoded.body.data[2], 'u');
- ck_assert_int_eq(out.content.encoded.body.data[3], 'n');
- ck_assert_int_eq(out.content.encoded.body.data[4], 'k');
- ck_assert_int_eq(out.content.encoded.body.data[5], 'n');
- ck_assert_int_eq(out.content.encoded.body.data[6], 'o');
- ck_assert_int_eq(out.content.encoded.body.data[7], 'w');
- UA_ExtensionObject_deleteMembers(&out);
- }
- END_TEST
- /* ----------------- Variant ---------------------*/
- START_TEST(UA_VariantBool_json_decode) {
- // given
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":1,\"Body\":false}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, 0);
- ck_assert_uint_eq(*((UA_Boolean*)out.data), 0);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_VariantBoolNull_json_decode) {
- // given
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":1,\"Body\":null}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_VariantStringArray_json_decode) {
- // given
-
- UA_Variant *out = UA_Variant_new();
- UA_Variant_init(out);
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\"],\"Dimension\":[2,4]}");
- //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, out, &UA_TYPES[UA_TYPES_VARIANT]);
- UA_String *testArray;
- testArray = (UA_String*)(out->data);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq((char)testArray[0].data[0], '1');
- ck_assert_int_eq((char)testArray[1].data[0], '2');
- ck_assert_int_eq((char)testArray[2].data[0], '3');
- ck_assert_int_eq((char)testArray[3].data[0], '4');
- ck_assert_int_eq((char)testArray[4].data[0], '5');
- ck_assert_int_eq((char)testArray[5].data[0], '6');
- ck_assert_int_eq((char)testArray[6].data[0], '7');
- ck_assert_int_eq((char)testArray[7].data[0], '8');
- ck_assert_int_eq(out->arrayDimensionsSize, 2);
- ck_assert_int_eq(out->arrayDimensions[0], 2);
- ck_assert_int_eq(out->arrayDimensions[1], 4);
- ck_assert_int_eq(out->arrayLength, 8);
- ck_assert_int_eq(out->type->typeIndex, 11);
- UA_Variant_delete(out);
- }
- END_TEST
- START_TEST(UA_VariantStringArrayNull_json_decode) {
- // given
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":[null, null, null, null, null, null, null, null],\"Dimension\":[2,4]}");
- //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- UA_String *testArray;
- testArray = (UA_String*)(out.data);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_ptr_eq(testArray[0].data, NULL);
- ck_assert_ptr_eq(testArray[1].data, NULL);
- ck_assert_ptr_eq(testArray[2].data, NULL);
- ck_assert_ptr_eq(testArray[3].data, NULL);
- ck_assert_ptr_eq(testArray[4].data, NULL);
- ck_assert_ptr_eq(testArray[5].data, NULL);
- ck_assert_ptr_eq(testArray[6].data, NULL);
- ck_assert_ptr_eq(testArray[7].data, NULL);
- ck_assert_int_eq(out.arrayDimensionsSize, 2);
- ck_assert_int_eq(out.arrayDimensions[0], 2);
- ck_assert_int_eq(out.arrayDimensions[1], 4);
- ck_assert_int_eq(out.arrayLength, 8);
- ck_assert_int_eq(out.type->typeIndex, 11);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_VariantLocalizedTextArrayNull_json_decode) {
- // given
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":21,\"Body\":[null, null, null, null, null, null, null, null],\"Dimension\":[2,4]}");
- //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- UA_LocalizedText *testArray;
- testArray = (UA_LocalizedText*)(out.data);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_ptr_eq(testArray[0].locale.data, NULL);
- ck_assert_ptr_eq(testArray[1].locale.data, NULL);
- ck_assert_ptr_eq(testArray[2].locale.data, NULL);
- ck_assert_ptr_eq(testArray[3].locale.data, NULL);
- ck_assert_ptr_eq(testArray[4].locale.data, NULL);
- ck_assert_ptr_eq(testArray[5].locale.data, NULL);
- ck_assert_ptr_eq(testArray[6].locale.data, NULL);
- ck_assert_ptr_eq(testArray[7].locale.data, NULL);
- ck_assert_int_eq(out.arrayDimensionsSize, 2);
- ck_assert_int_eq(out.arrayDimensions[0], 2);
- ck_assert_int_eq(out.arrayDimensions[1], 4);
- ck_assert_int_eq(out.arrayLength, 8);
- ck_assert_int_eq(out.type->typeIndex, 20);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_VariantVariantArrayNull_json_decode) {
- // given
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":22,\"Body\":[null, null, null, null, null, null, null, null],\"Dimension\":[2,4]}");
- //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- UA_Variant *testArray;
- testArray = (UA_Variant*)(out.data);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert(!testArray[0].type);
- ck_assert_int_eq(out.arrayDimensionsSize, 2);
- ck_assert_int_eq(out.arrayDimensions[0], 2);
- ck_assert_int_eq(out.arrayDimensions[1], 4);
- ck_assert_int_eq(out.arrayLength, 8);
- ck_assert_int_eq(out.type->typeIndex, 21);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_VariantVariantArrayEmpty_json_decode) {
- // given
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":22,\"Body\":[]}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.arrayLength, 0);
- ck_assert_ptr_eq(out.data, UA_EMPTY_ARRAY_SENTINEL);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_VariantStringArray_WithoutDimension_json_decode) {
- // given
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\"]}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- UA_String *testArray;
- testArray = (UA_String*)(out.data);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq((char)testArray[0].data[0], '1');
- ck_assert_int_eq((char)testArray[1].data[0], '2');
- ck_assert_int_eq((char)testArray[2].data[0], '3');
- ck_assert_int_eq((char)testArray[3].data[0], '4');
- ck_assert_int_eq((char)testArray[4].data[0], '5');
- ck_assert_int_eq((char)testArray[5].data[0], '6');
- ck_assert_int_eq((char)testArray[6].data[0], '7');
- ck_assert_int_eq((char)testArray[7].data[0], '8');
- ck_assert_int_eq(out.arrayDimensionsSize, 0);
- ck_assert_int_eq(out.arrayLength, 8);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_STRING);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Variant_BooleanArray_json_decode) {
- // given
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":1,\"Body\":[true, false, true]}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- UA_Boolean *testArray;
- testArray = (UA_Boolean*)(out.data);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- //decoded as False
- ck_assert_int_eq(testArray[0], 1);
- ck_assert_int_eq(testArray[1], 0);
- ck_assert_int_eq(testArray[2], 1);
- ck_assert_int_eq(out.arrayDimensionsSize, 0);
- ck_assert_int_eq(out.arrayLength, 3);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_BOOLEAN);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Variant_bad1_json_decode) {
- // given
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":1,\"Body\":\"\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- UA_Variant_deleteMembers(&out);
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- }
- END_TEST
- START_TEST(UA_Variant_ExtensionObjectWrap_json_decode) {
- // given
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":22,\"Body\":{\"TypeId\":{\"Id\":511},\"Body\":{\"ViewId\":{\"Id\":99999},\"Timestamp\":\"1970-01-15T06:56:07.000Z\",\"ViewVersion\":1236}}}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
-
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.type->typeIndex, UA_TYPES_VIEWDESCRIPTION);
- UA_ViewDescription *vd = (UA_ViewDescription*)out.data;
- ck_assert_int_eq(vd->viewId.identifier.numeric, 99999);
- ck_assert_int_eq(vd->viewVersion, 1236);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_duplicate_json_decode) {
- // given
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":1, \"Body\":false, \"Type\":1}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_wrongBoolean_json_decode) {
- // given
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":1, \"Body\":\"asdfaaaaaaaaaaaaaaaaaaaa\"}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_DataTypeAttributes_json_decode) {
- // given
- UA_DataTypeAttributes out;
- UA_DataTypeAttributes_init(&out);
- UA_ByteString buf = UA_STRING("{\"SpecifiedAttributes\":1,"
- "\"DisplayName\":{\"Locale\":\"t1\",\"Text\":\"t2\"},"
- "\"Description\":{\"Locale\":\"t3\",\"Text\":\"t4\"},"
- "\"WriteMask\":53,"
- "\"UserWriteMask\":63,"
- "\"IsAbstract\":false}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
- ck_assert_int_eq(out.isAbstract, 0);
- ck_assert_int_eq(out.writeMask, 53);
- ck_assert_int_eq(out.userWriteMask, 63);
- ck_assert_int_eq(out.specifiedAttributes, 1);
- ck_assert_int_eq(out.displayName.locale.data[1], '1');
- ck_assert_int_eq(out.displayName.text.data[1], '2');
- ck_assert_int_eq(out.description.locale.data[1], '3');
- ck_assert_int_eq(out.description.text.data[1], '4');
- UA_DataTypeAttributes_deleteMembers(&out);
- }
- END_TEST
- //-------------------MISC heap free test cases--------------------------
- START_TEST(UA_VariantStringArrayBad_shouldFreeArray_json_decode) {
- // given
-
- UA_Variant out;
- UA_Variant_init(&out); //not a string V
- UA_ByteString buf = UA_STRING("{\"Type\":12,\"Body\":[\"1\",\"2\",true,\"4\",\"5\",\"6\",\"7\",\"8\"],\"Dimension\":[2,4]}");
- //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_VariantFuzzer1_json_decode) {
- // given
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("\\x0a{\"Type\",\"Bode\",\"Body\":{\"se\":}}");
- //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- //This test succeeds: Double will be parsed to zero if unparsable
- // TODO: Verify against the spec
- START_TEST(UA_VariantFuzzer2_json_decode) {
- // given
-
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":11,\"Body\":2E+}");
- //UA_ByteString buf = UA_STRING("{\"SymbolicId\":13,\"LocalizedText\":14,\"Locale\":12,\"AdditionalInfo\":\"additionalInfo\",\"InnerStatusCode\":2155216896}");
- // when
-
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert(retval == UA_STATUSCODE_GOOD || retval == UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Variant_Bad_Type_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- UA_ByteString buf = UA_STRING("{\"Type\":1000,\"Body\":0}");
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_Variant_Bad_Type2_decode) {
- for(int i = 0; i < 100; i++){
- UA_Variant out;
- UA_Variant_init(&out);
- char str[80];
- sprintf(str, "{\"Type\":%d}", i);
- UA_ByteString buf = UA_STRING(str);
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, retval);
- UA_Variant_deleteMembers(&out);
- }
- }
- END_TEST
- START_TEST(UA_Variant_Null_decode) {
- for(int i = 0; i < 100; i++){
- UA_Variant out;
- UA_Variant_init(&out);
- char str[80];
- sprintf(str, "{\"Type\":%d, \"Body:\":null}", i);
- UA_ByteString buf = UA_STRING(str);
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, retval);
- UA_Variant_deleteMembers(&out);
- }
- }
- END_TEST
- START_TEST(UA_Variant_Malformed_decode) {
- for(int i = 0; i < 100; i++){
- UA_Variant out;
- UA_Variant_init(&out);
- char str[80];
- sprintf(str, "{\"Type\":%d, \"Body:\"}", i);
- UA_ByteString buf = UA_STRING(str);
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- }
- END_TEST
- START_TEST(UA_Variant_Malformed2_decode) {
- UA_Variant out;
- UA_Variant_init(&out);
- char str[80];
- sprintf(str, "{\"Type\":, \"Body:\"}");
- UA_ByteString buf = UA_STRING(str);
- // when
- UA_StatusCode retval = UA_decodeJson(&buf, &out, &UA_TYPES[UA_TYPES_VARIANT]);
- // then
- ck_assert_int_eq(retval, UA_STATUSCODE_BADDECODINGERROR);
- UA_Variant_deleteMembers(&out);
- }
- END_TEST
- START_TEST(UA_JsonHelper) {
- // given
-
- CtxJson ctx;
- memset(&ctx, 0, sizeof(ctx));
- ck_assert_int_eq(writeJsonArrStart(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- ck_assert_int_eq(writeJsonObjStart(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- ck_assert_int_eq(writeJsonObjEnd(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- ck_assert_int_eq(writeJsonArrEnd(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- ck_assert_int_eq(writeJsonNull(&ctx), UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED);
- ctx.calcOnly = true;
- ctx.end = (const UA_Byte*)(uintptr_t)SIZE_MAX;
- ck_assert_int_eq(calcJsonArrStart(&ctx), UA_STATUSCODE_GOOD);
- ck_assert_int_eq(calcJsonObjStart(&ctx), UA_STATUSCODE_GOOD);
- ck_assert_int_eq(calcJsonObjEnd(&ctx), UA_STATUSCODE_GOOD);
- ck_assert_int_eq(calcJsonArrEnd(&ctx), UA_STATUSCODE_GOOD);
- }
- END_TEST
- static Suite *testSuite_builtin_json(void) {
- Suite *s = suite_create("Built-in Data Types 62541-6 Json");
-
- TCase *tc_json_encode = tcase_create("json_encode");
- tcase_add_test(tc_json_encode, UA_Boolean_true_json_encode);
- tcase_add_test(tc_json_encode, UA_Boolean_false_json_encode);
- tcase_add_test(tc_json_encode, UA_Boolean_true_bufferTooSmall_json_encode);
-
- tcase_add_test(tc_json_encode, UA_String_json_encode);
- tcase_add_test(tc_json_encode, UA_String_Empty_json_encode);
- tcase_add_test(tc_json_encode, UA_String_Null_json_encode);
- tcase_add_test(tc_json_encode, UA_String_escapesimple_json_encode);
- tcase_add_test(tc_json_encode, UA_String_escapeutf_json_encode);
- tcase_add_test(tc_json_encode, UA_String_special_json_encode);
-
- tcase_add_test(tc_json_encode, UA_Byte_Max_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Byte_Min_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Byte_smallbuf_Number_json_encode);
-
- tcase_add_test(tc_json_encode, UA_SByte_Max_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_SByte_Min_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_SByte_Zero_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_SByte_smallbuf_Number_json_encode);
-
-
- tcase_add_test(tc_json_encode, UA_UInt16_Max_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_UInt16_Min_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_UInt16_smallbuf_Number_json_encode);
-
- tcase_add_test(tc_json_encode, UA_Int16_Max_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Int16_Min_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Int16_Zero_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Int16_smallbuf_Number_json_encode);
-
-
- tcase_add_test(tc_json_encode, UA_UInt32_Max_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_UInt32_Min_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_UInt32_smallbuf_Number_json_encode);
-
- tcase_add_test(tc_json_encode, UA_Int32_Max_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Int32_Min_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Int32_Zero_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Int32_smallbuf_Number_json_encode);
-
-
- tcase_add_test(tc_json_encode, UA_UInt64_Max_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_UInt64_Min_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_UInt64_smallbuf_Number_json_encode);
-
- tcase_add_test(tc_json_encode, UA_Int64_Max_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Int64_Min_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Int64_Zero_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Int64_smallbuf_Number_json_encode);
-
- //Double Float
- tcase_add_test(tc_json_encode, UA_Double_json_encode);
- tcase_add_test(tc_json_encode, UA_Double_onesmallest_json_encode);
- tcase_add_test(tc_json_encode, UA_Double_pluszero_json_encode);
- tcase_add_test(tc_json_encode, UA_Double_minuszero_json_encode);
- tcase_add_test(tc_json_encode, UA_Double_plusInf_json_encode);
- tcase_add_test(tc_json_encode, UA_Double_minusInf_json_encode);
- tcase_add_test(tc_json_encode, UA_Double_nan_json_encode);
- tcase_add_test(tc_json_encode, UA_Float_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_Float_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_DoubleInf_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_DoubleNan_json_encode);
-
- //LocalizedText
- tcase_add_test(tc_json_encode, UA_LocText_json_encode);
- tcase_add_test(tc_json_encode, UA_LocText_NonReversible_json_encode);
- tcase_add_test(tc_json_encode, UA_LocText_smallBuffer_json_encode);
-
- //Guid
- tcase_add_test(tc_json_encode, UA_Guid_json_encode);
- tcase_add_test(tc_json_encode, UA_Guid_smallbuf_json_encode);
-
- //DateTime
- tcase_add_test(tc_json_encode, UA_DateTime_json_encode);
- tcase_add_test(tc_json_encode, UA_DateTime_with_nanoseconds_json_encode);
-
-
- //StatusCode
- tcase_add_test(tc_json_encode, UA_StatusCode_json_encode);
- tcase_add_test(tc_json_encode, UA_StatusCode_nonReversible_json_encode);
- tcase_add_test(tc_json_encode, UA_StatusCode_nonReversible_good_json_encode);
- tcase_add_test(tc_json_encode, UA_StatusCode_smallbuf_json_encode);
-
-
- //NodeId
- tcase_add_test(tc_json_encode, UA_NodeId_Numeric_json_encode);
- tcase_add_test(tc_json_encode, UA_NodeId_Numeric_Namespace_json_encode);
-
- tcase_add_test(tc_json_encode, UA_NodeId_String_json_encode);
- tcase_add_test(tc_json_encode, UA_NodeId_String_Namespace_json_encode);
- tcase_add_test(tc_json_encode, UA_NodeId_Guid_json_encode);
- tcase_add_test(tc_json_encode, UA_NodeId_Guid_Namespace_json_encode);
-
- tcase_add_test(tc_json_encode, UA_NodeId_ByteString_json_encode);
- tcase_add_test(tc_json_encode, UA_NodeId_ByteString_Namespace_json_encode);
-
- tcase_add_test(tc_json_encode, UA_NodeId_NonReversible_Numeric_Namespace_json_encode);
-
- //ExpandedNodeId
- tcase_add_test(tc_json_encode, UA_ExpandedNodeId_json_encode);
- tcase_add_test(tc_json_encode, UA_ExpandedNodeId_MissingNamespaceUri_json_encode);
- tcase_add_test(tc_json_encode, UA_ExpandedNodeId_NonReversible_Ns1_json_encode);
- tcase_add_test(tc_json_encode, UA_ExpandedNodeId_NonReversible_Namespace_json_encode);
- tcase_add_test(tc_json_encode, UA_ExpandedNodeId_NonReversible_NamespaceUriGiven_json_encode);
-
-
- //DiagnosticInfo
- tcase_add_test(tc_json_encode, UA_DiagInfo_json_encode);
- tcase_add_test(tc_json_encode, UA_DiagInfo_withInner_json_encode);
- tcase_add_test(tc_json_encode, UA_DiagInfo_withTwoInner_json_encode);
- tcase_add_test(tc_json_encode, UA_DiagInfo_noFields_json_encode);
- tcase_add_test(tc_json_encode, UA_DiagInfo_smallBuffer_json_encode);
-
-
- //ByteString
- tcase_add_test(tc_json_encode, UA_ByteString_json_encode);
- tcase_add_test(tc_json_encode, UA_ByteString2_json_encode);
- tcase_add_test(tc_json_encode, UA_ByteString3_json_encode);
-
- //QualifiedName
- tcase_add_test(tc_json_encode, UA_QualName_json_encode);
- tcase_add_test(tc_json_encode, UA_QualName_NonReversible_json_encode);
- tcase_add_test(tc_json_encode, UA_QualName_NonReversible_Namespace_json_encode);
- tcase_add_test(tc_json_encode, UA_QualName_NonReversible_NoNamespaceAsNumber_json_encode);
-
- //Variant -REVERSIBLE-
- tcase_add_test(tc_json_encode, UA_Variant_Bool_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_Number_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_Double_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_Double2_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_Double3_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_NodeId_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_LocText_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_QualName_json_encode);
-
- //Array
- tcase_add_test(tc_json_encode, UA_Variant_Array_UInt16_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_Array_Byte_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_Array_String_json_encode);
-
- //Matrix
- tcase_add_test(tc_json_encode, UA_Variant_Matrix_UInt16_json_encode);
-
- //Wrap
- tcase_add_test(tc_json_encode, UA_Variant_Wrap_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_Wrap_Array_json_encode);
-
- //Variant -NON-REVERSIBLE-
- tcase_add_test(tc_json_encode, UA_Variant_StatusCode_NonReversible_json_encode);
-
- //Array
- tcase_add_test(tc_json_encode, UA_Variant_Array_String_NonReversible_json_encode);
-
- //Matrix
- tcase_add_test(tc_json_encode, UA_Variant_Matrix_String_NonReversible_json_encode);
- tcase_add_test(tc_json_encode, UA_Variant_Matrix_NodeId_NonReversible_json_encode);
-
- //Wrap non reversible
- tcase_add_test(tc_json_encode, UA_Variant_Wrap_Array_NonReversible_json_encode);
-
-
- //ExtensionObject
- tcase_add_test(tc_json_encode, UA_ExtensionObject_json_encode);
- tcase_add_test(tc_json_encode, UA_ExtensionObject_xml_json_encode);
- tcase_add_test(tc_json_encode, UA_ExtensionObject_byteString_json_encode);
-
- tcase_add_test(tc_json_encode, UA_ExtensionObject_NonReversible_StatusCode_json_encode);
-
- //DataValue
- tcase_add_test(tc_json_encode, UA_DataValue_json_encode);
- tcase_add_test(tc_json_encode, UA_DataValue_null_json_encode);
- tcase_add_test(tc_json_encode, UA_MessageReadResponse_json_encode);
- tcase_add_test(tc_json_encode, UA_ViewDescription_json_encode);
- tcase_add_test(tc_json_encode, UA_WriteRequest_json_encode);
- tcase_add_test(tc_json_encode, UA_VariableAttributes_json_encode);
- suite_add_tcase(s, tc_json_encode);
-
- TCase *tc_json_decode = tcase_create("json_decode");
-
-
- tcase_add_test(tc_json_decode, UA_SByte_Min_json_decode);
- tcase_add_test(tc_json_decode, UA_SByte_Max_json_decode);
-
- tcase_add_test(tc_json_decode, UA_Byte_Min_json_decode);
- tcase_add_test(tc_json_decode, UA_Byte_Max_json_decode);
-
- tcase_add_test(tc_json_decode, UA_Int16_Min_json_decode);
- tcase_add_test(tc_json_decode, UA_Int16_Max_json_decode);
-
- tcase_add_test(tc_json_decode, UA_UInt16_Min_json_decode);
- tcase_add_test(tc_json_decode, UA_UInt16_Max_json_decode);
-
- tcase_add_test(tc_json_decode, UA_UInt32_Min_json_decode);
- tcase_add_test(tc_json_decode, UA_UInt32_Max_json_decode);
-
- tcase_add_test(tc_json_decode, UA_Int32_Min_json_decode);
- tcase_add_test(tc_json_decode, UA_Int32_Max_json_decode);
-
- tcase_add_test(tc_json_decode, UA_Int64_Min_json_decode);
- tcase_add_test(tc_json_decode, UA_Int64_Max_json_decode);
- tcase_add_test(tc_json_decode, UA_Int64_Overflow_json_decode);
- tcase_add_test(tc_json_decode, UA_Int64_TooBig_json_decode);
- tcase_add_test(tc_json_decode, UA_Int64_NoDigit_json_decode);
-
- tcase_add_test(tc_json_decode, UA_UInt64_Min_json_decode);
- tcase_add_test(tc_json_decode, UA_UInt64_Max_json_decode);
- tcase_add_test(tc_json_decode, UA_UInt64_Overflow_json_decode);
-
-
- tcase_add_test(tc_json_decode, UA_Float_json_decode);
- tcase_add_test(tc_json_decode, UA_Float_json_one_decode);
- tcase_add_test(tc_json_decode, UA_Float_json_inf_decode);
- tcase_add_test(tc_json_decode, UA_Float_json_neginf_decode);
- tcase_add_test(tc_json_decode, UA_Float_json_nan_decode);
- tcase_add_test(tc_json_decode, UA_Float_json_negnan_decode);
-
- tcase_add_test(tc_json_decode, UA_Double_json_decode);
- tcase_add_test(tc_json_decode, UA_Double_one_json_decode);
- tcase_add_test(tc_json_decode, UA_Double_corrupt_json_decode);
- tcase_add_test(tc_json_decode, UA_Double_onepointsmallest_json_decode);
- tcase_add_test(tc_json_decode, UA_Double_nan_json_decode);
- tcase_add_test(tc_json_decode, UA_Double_negnan_json_decode);
- tcase_add_test(tc_json_decode, UA_Double_negzero_json_decode);
- tcase_add_test(tc_json_decode, UA_Double_zero_json_decode);
- tcase_add_test(tc_json_decode, UA_Double_inf_json_decode);
- tcase_add_test(tc_json_decode, UA_Double_neginf_json_decode);
-
-
- //String
- tcase_add_test(tc_json_decode, UA_String_json_decode);
- tcase_add_test(tc_json_decode, UA_String_empty_json_decode);
- tcase_add_test(tc_json_decode, UA_String_unescapeBS_json_decode);
-
- tcase_add_test(tc_json_decode, UA_String_escape_unicode_json_decode);
-
- tcase_add_test(tc_json_decode, UA_String_escape2_json_decode);
- tcase_add_test(tc_json_decode, UA_String_surrogatePair_json_decode);
-
- //ByteString
- tcase_add_test(tc_json_decode, UA_ByteString_json_decode);
- tcase_add_test(tc_json_decode, UA_ByteString_bad_json_decode);
- tcase_add_test(tc_json_decode, UA_ByteString_null_json_decode);
-
-
- //DateTime
- tcase_add_test(tc_json_decode, UA_DateTime_json_decode);
- tcase_add_test(tc_json_decode, UA_DateTime_micro_json_decode);
-
-
- //Guid
- tcase_add_test(tc_json_decode, UA_Guid_json_decode);
- tcase_add_test(tc_json_decode, UA_Guid_lower_json_decode);
- tcase_add_test(tc_json_decode, UA_Guid_tooShort_json_decode);
- tcase_add_test(tc_json_decode, UA_Guid_tooLong_json_decode);
- tcase_add_test(tc_json_decode, UA_Guid_wrong_json_decode);
-
-
- //StatusCode
- tcase_add_test(tc_json_decode, UA_StatusCode_2_json_decode);
- tcase_add_test(tc_json_decode, UA_StatusCode_3_json_decode);
- tcase_add_test(tc_json_decode, UA_StatusCode_0_json_decode);
-
-
- //QualName
- tcase_add_test(tc_json_decode, UA_QualifiedName_json_decode);
- tcase_add_test(tc_json_decode, UA_QualifiedName_null_json_decode);
-
-
- //LocalizedText
- tcase_add_test(tc_json_decode, UA_LocalizedText_json_decode);
- tcase_add_test(tc_json_decode, UA_LocalizedText_missing_json_decode);
- tcase_add_test(tc_json_decode, UA_LocalizedText_null_json_decode);
-
- //-NodeId-
- tcase_add_test(tc_json_decode, UA_NodeId_Nummeric_json_decode);
- tcase_add_test(tc_json_decode, UA_NodeId_Nummeric_Namespace_json_decode);
- tcase_add_test(tc_json_decode, UA_NodeId_String_json_decode);
-
- tcase_add_test(tc_json_decode, UA_NodeId_Guid_json_decode);
-
- tcase_add_test(tc_json_decode, UA_NodeId_ByteString_json_decode);
-
-
- //expandednodeid
- tcase_add_test(tc_json_decode, UA_ExpandedNodeId_Nummeric_json_decode);
- tcase_add_test(tc_json_decode, UA_ExpandedNodeId_String_json_decode);
- tcase_add_test(tc_json_decode, UA_ExpandedNodeId_String_Namespace_json_decode);
- tcase_add_test(tc_json_decode, UA_ExpandedNodeId_String_NamespaceAsIndex_json_decode);
- tcase_add_test(tc_json_decode, UA_ExpandedNodeId_String_Namespace_ServerUri_json_decode);
- tcase_add_test(tc_json_decode, UA_ExpandedNodeId_ByteString_json_decode);
-
- //Diaginfo
- tcase_add_test(tc_json_decode, UA_DiagnosticInfo_json_decode);
- tcase_add_test(tc_json_decode, UA_DiagnosticInfo_null_json_decode);
-
-
- //Variant
- tcase_add_test(tc_json_decode, UA_VariantBool_json_decode);
- tcase_add_test(tc_json_decode, UA_VariantBoolNull_json_decode);
- tcase_add_test(tc_json_decode, UA_VariantStringArray_json_decode);
- tcase_add_test(tc_json_decode, UA_VariantStringArrayNull_json_decode);
- tcase_add_test(tc_json_decode, UA_VariantLocalizedTextArrayNull_json_decode);
- tcase_add_test(tc_json_decode, UA_VariantVariantArrayNull_json_decode);
- tcase_add_test(tc_json_decode, UA_VariantVariantArrayEmpty_json_decode);
- tcase_add_test(tc_json_decode, UA_VariantStringArray_WithoutDimension_json_decode);
- tcase_add_test(tc_json_decode, UA_Variant_BooleanArray_json_decode);
- tcase_add_test(tc_json_decode, UA_Variant_bad1_json_decode);
- tcase_add_test(tc_json_decode, UA_Variant_ExtensionObjectWrap_json_decode);
-
- //DataValue
- tcase_add_test(tc_json_decode, UA_DataValue_json_decode);
- tcase_add_test(tc_json_decode, UA_DataValueMissingFields_json_decode);
- tcase_add_test(tc_json_decode, UA_DataValue_null_json_decode);
-
- //extensionobject
- tcase_add_test(tc_json_decode, UA_ExtensionObject_json_decode);
- tcase_add_test(tc_json_decode, UA_ExtensionObject_EncodedByteString_json_decode);
- tcase_add_test(tc_json_decode, UA_ExtensionObject_EncodedXml_json_decode);
- tcase_add_test(tc_json_decode, UA_ExtensionObject_Unkown_json_decode);
-
-
- //Others
- tcase_add_test(tc_json_decode, UA_duplicate_json_decode);
- tcase_add_test(tc_json_decode, UA_wrongBoolean_json_decode);
-
- tcase_add_test(tc_json_decode, UA_ViewDescription_json_decode);
- tcase_add_test(tc_json_decode, UA_DataTypeAttributes_json_decode);
-
-
- tcase_add_test(tc_json_decode, UA_VariantStringArrayBad_shouldFreeArray_json_decode);
- tcase_add_test(tc_json_decode, UA_VariantFuzzer1_json_decode);
- tcase_add_test(tc_json_decode, UA_VariantFuzzer2_json_decode);
- tcase_add_test(tc_json_decode, UA_Variant_Bad_Type_decode);
- tcase_add_test(tc_json_decode, UA_Variant_Bad_Type2_decode);
- tcase_add_test(tc_json_decode, UA_Variant_Null_decode);
- tcase_add_test(tc_json_decode, UA_Variant_Malformed_decode);
- tcase_add_test(tc_json_decode, UA_Variant_Malformed2_decode);
- suite_add_tcase(s, tc_json_decode);
-
- TCase *tc_json_helper = tcase_create("json_helper");
- tcase_add_test(tc_json_decode, UA_JsonHelper);
- suite_add_tcase(s, tc_json_helper);
- return s;
- }
- int main(void) {
- int number_failed = 0;
- Suite *s;
- SRunner *sr;
- s = testSuite_builtin_json();
- sr = srunner_create(s);
- srunner_set_fork_status(sr, CK_NOFORK);
- srunner_run_all(sr, CK_NORMAL);
- number_failed += srunner_ntests_failed(sr);
- srunner_free(sr);
- return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
- }
|