1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055 |
- /* 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 <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <float.h>
- #include "ua_types.h"
- #include "ua_types_encoding_binary.h"
- #include "ua_types_encoding_json.h"
- #include "ua_types_generated.h"
- #include "ua_types_generated_handling.h"
- #include "ua_types_generated_encoding_binary.h"
- #include "ua_util.h"
- #include "check.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;
- }
|