12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644 |
- #include "unity.h"
- #include "iec60870_common.h"
- #include "cs104_slave.h"
- #include "cs104_connection.h"
- #include "hal_time.h"
- #include "hal_thread.h"
- #include "buffer_frame.h"
- #include <string.h>
- #include <stdlib.h>
- #ifndef CONFIG_CS104_SUPPORT_TLS
- #define CONFIG_CS104_SUPPORT_TLS 0
- #endif
- int
- CS104_Connection_sendMessage(CS104_Connection self, uint8_t* message, int messageSize);
- #if WIN32
- #define bzero(b,len) (memset((b), '\0', (len)), (void) 0)
- #endif
- void setUp(void) { }
- void tearDown(void) {}
- static struct sCS101_AppLayerParameters defaultAppLayerParameters = {
- /* .sizeOfTypeId = */ 1,
- /* .sizeOfVSQ = */ 1,
- /* .sizeOfCOT = */ 2,
- /* .originatorAddress = */ 0,
- /* .sizeOfCA = */ 2,
- /* .sizeOfIOA = */ 3,
- /* .maxSizeOfASDU = */ 249
- };
- typedef struct sCS104_IPAddress* CS104_IPAddress;
- struct sCS104_IPAddress
- {
- uint8_t address[16];
- eCS104_IPAddressType type;
- };
- static bool
- CS104_IPAddress_setFromString(CS104_IPAddress self, const char* ipAddrStr)
- {
- if (strchr(ipAddrStr, '.') != NULL) {
- /* parse IPv4 string */
- self->type = IP_ADDRESS_TYPE_IPV4;
- int i;
- for (i = 0; i < 4; i++) {
- uint32_t val = strtoul(ipAddrStr, NULL, 10);
- if (val > UINT8_MAX)
- return false;
- self->address[i] = val;
- ipAddrStr = strchr(ipAddrStr, '.');
- if ((ipAddrStr == NULL) || (*ipAddrStr == 0))
- break;
- ipAddrStr++;
- }
- return true;
- }
- else if (strchr(ipAddrStr, ':') != NULL) {
- self->type = IP_ADDRESS_TYPE_IPV6;
- /* has "::" ? */
- char* doubleSep = (char*) strstr(ipAddrStr, "::");
- int elementsBefore = 0;
- int elementsAfter = 8;
- int elementsSkipped = 0;
- if (doubleSep) {
- /* count number of elements before double separator */
- char* curPos = (char*) ipAddrStr;
- if (curPos != doubleSep) {
- elementsBefore = 1;
- while (curPos < doubleSep) {
- if (*curPos == ':')
- elementsBefore++;
- curPos++;
- }
- }
- /* count number of elements after double separator */
- elementsAfter = 0;
- curPos = doubleSep + 2;
- if (*curPos != 0) {
- elementsAfter = 1;
- while (*curPos != 0) {
- if (*curPos == ':')
- elementsAfter++;
- curPos++;
- }
- }
- elementsSkipped = 8 - elementsBefore - elementsAfter;
- }
- int i;
- for (i = 0; i < elementsBefore; i++) {
- uint32_t val = strtoul(ipAddrStr, NULL, 16);
- if (val > UINT16_MAX)
- return false;
- self->address[i * 2] = val / 0x100;
- self->address[i * 2 + 1] = val % 0x100;
- ipAddrStr = strchr(ipAddrStr, ':');
- if ((ipAddrStr == NULL) || (*ipAddrStr == 0))
- break;
- ipAddrStr++;
- }
- for (i = elementsBefore; i < elementsBefore + elementsSkipped; i++) {
- self->address[i * 2] = 0;
- self->address[i * 2 +1] = 0;
- }
- if (doubleSep)
- ipAddrStr = doubleSep + 2;
- for (i = elementsBefore + elementsSkipped; i < 8; i++) {
- uint32_t val = strtoul(ipAddrStr, NULL, 16);
- if (val > UINT16_MAX)
- return false;
- self->address[i * 2] = val / 0x100;
- self->address[i * 2 + 1] = val % 0x100;
- ipAddrStr = strchr(ipAddrStr, ':');
- if ((ipAddrStr == NULL) || (*ipAddrStr == 0))
- break;
- ipAddrStr++;
- }
- return true;
- }
- else {
- return false;
- }
- }
- static bool
- CS104_IPAddress_equals(CS104_IPAddress self, CS104_IPAddress other)
- {
- if (self->type != other->type)
- return false;
- int size;
- if (self->type == IP_ADDRESS_TYPE_IPV4)
- size = 4;
- else
- size = 16;
- int i;
- for (i = 0; i < size; i++) {
- if (self->address[i] != other->address[i])
- return false;
- }
- return true;
- }
- #ifdef __cplusplus
- extern "C" {
- #endif
- void
- CS101_ASDU_encode(CS101_ASDU self, Frame frame);
- CS101_ASDU
- CS101_ASDU_createFromBuffer(CS101_AppLayerParameters parameters, uint8_t* msg, int msgLength);
- #ifdef __cplusplus
- }
- #endif
- void
- test_CP56Time2a(void)
- {
- struct sCP56Time2a currentTime;
- uint64_t currentTimestamp = Hal_getTimeInMs();
- CP56Time2a_createFromMsTimestamp(¤tTime, currentTimestamp);
- uint64_t convertedTimestamp = CP56Time2a_toMsTimestamp(¤tTime);
- TEST_ASSERT_EQUAL_UINT64(currentTimestamp, convertedTimestamp);
- }
- void
- test_CP56Time2aToMsTimestamp(void)
- {
- struct sCP56Time2a timeval;
- timeval.encodedValue[0] = 0x85;
- timeval.encodedValue[1] = 0x49;
- timeval.encodedValue[2] = 0x0c;
- timeval.encodedValue[3] = 0x09;
- timeval.encodedValue[4] = 0x55;
- timeval.encodedValue[5] = 0x03;
- timeval.encodedValue[6] = 0x11;
- uint64_t convertedTimeval = CP56Time2a_toMsTimestamp(&timeval);
- TEST_ASSERT_EQUAL_UINT64((uint64_t) 1490087538821, convertedTimeval);
- }
- void
- test_CP56Time2aConversionFunctions(void)
- {
- uint64_t currentTime = Hal_getTimeInMs();
- struct sCP56Time2a timeval;
- CP56Time2a_setFromMsTimestamp(&timeval, currentTime);
- uint64_t convertedTime = CP56Time2a_toMsTimestamp(&timeval);
- TEST_ASSERT_EQUAL_UINT64(currentTime, convertedTime);
- }
- void
- test_StepPositionInformation(void)
- {
- StepPositionInformation spi1;
- StepPositionInformation spi2;
- StepPositionInformation spi3;
- StepPositionInformation spi4;
- StepPositionInformation spi5;
- StepPositionInformation spi6;
- StepPositionInformation spi7;
- StepPositionInformation spi8;
- spi1 = StepPositionInformation_create(NULL, 101, 0, true, IEC60870_QUALITY_GOOD);
- spi2 = StepPositionInformation_create(NULL, 102, 63, false, IEC60870_QUALITY_OVERFLOW);
- spi3 = StepPositionInformation_create(NULL, 103, 62, false, IEC60870_QUALITY_RESERVED);
- spi4 = StepPositionInformation_create(NULL, 104, 61, false, IEC60870_QUALITY_ELAPSED_TIME_INVALID);
- spi5 = StepPositionInformation_create(NULL, 105, -61, false, IEC60870_QUALITY_BLOCKED);
- spi6 = StepPositionInformation_create(NULL, 106, -62, false, IEC60870_QUALITY_SUBSTITUTED);
- spi7 = StepPositionInformation_create(NULL, 107, -63, false, IEC60870_QUALITY_NON_TOPICAL);
- spi8 = StepPositionInformation_create(NULL, 108, 0, false, IEC60870_QUALITY_INVALID);
- TEST_ASSERT_EQUAL_INT(0, StepPositionInformation_getValue(spi1));
- TEST_ASSERT_TRUE(StepPositionInformation_isTransient(spi1));
- TEST_ASSERT_EQUAL_INT(63, StepPositionInformation_getValue(spi2));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi2));
- TEST_ASSERT_EQUAL_INT(62, StepPositionInformation_getValue(spi3));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi3));
- TEST_ASSERT_EQUAL_INT(61, StepPositionInformation_getValue(spi4));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi4));
- TEST_ASSERT_EQUAL_INT(-61, StepPositionInformation_getValue(spi5));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi5));
- TEST_ASSERT_EQUAL_INT(-62, StepPositionInformation_getValue(spi6));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi6));
- TEST_ASSERT_EQUAL_INT(-63, StepPositionInformation_getValue(spi7));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi7));
- TEST_ASSERT_EQUAL_INT(0, StepPositionInformation_getValue(spi8));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi8));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, StepPositionInformation_getQuality(spi1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, StepPositionInformation_getQuality(spi2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, StepPositionInformation_getQuality(spi3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, StepPositionInformation_getQuality(spi4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, StepPositionInformation_getQuality(spi5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, StepPositionInformation_getQuality(spi6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, StepPositionInformation_getQuality(spi7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, StepPositionInformation_getQuality(spi8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi8);
- StepPositionInformation_destroy(spi1);
- StepPositionInformation_destroy(spi2);
- StepPositionInformation_destroy(spi3);
- StepPositionInformation_destroy(spi4);
- StepPositionInformation_destroy(spi5);
- StepPositionInformation_destroy(spi6);
- StepPositionInformation_destroy(spi7);
- StepPositionInformation_destroy(spi8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(46, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- StepPositionInformation spi1_dec = (StepPositionInformation) CS101_ASDU_getElement(asdu2, 0);
- StepPositionInformation spi2_dec = (StepPositionInformation) CS101_ASDU_getElement(asdu2, 1);
- StepPositionInformation spi3_dec = (StepPositionInformation) CS101_ASDU_getElement(asdu2, 2);
- StepPositionInformation spi4_dec = (StepPositionInformation) CS101_ASDU_getElement(asdu2, 3);
- StepPositionInformation spi5_dec = (StepPositionInformation) CS101_ASDU_getElement(asdu2, 4);
- StepPositionInformation spi6_dec = (StepPositionInformation) CS101_ASDU_getElement(asdu2, 5);
- StepPositionInformation spi7_dec = (StepPositionInformation) CS101_ASDU_getElement(asdu2, 6);
- StepPositionInformation spi8_dec = (StepPositionInformation) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject)spi1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject)spi2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject)spi3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject)spi4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject)spi5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject)spi6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject)spi7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject)spi8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, StepPositionInformation_getQuality(spi1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, StepPositionInformation_getQuality(spi2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, StepPositionInformation_getQuality(spi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, StepPositionInformation_getQuality(spi4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, StepPositionInformation_getQuality(spi5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, StepPositionInformation_getQuality(spi6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, StepPositionInformation_getQuality(spi7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, StepPositionInformation_getQuality(spi8_dec));
- TEST_ASSERT_EQUAL_INT(0, StepPositionInformation_getValue(spi1_dec));
- TEST_ASSERT_TRUE(StepPositionInformation_isTransient(spi1_dec));
- TEST_ASSERT_EQUAL_INT(63, StepPositionInformation_getValue(spi2_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi2_dec));
- TEST_ASSERT_EQUAL_INT(62, StepPositionInformation_getValue(spi3_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi3_dec));
- TEST_ASSERT_EQUAL_INT(61, StepPositionInformation_getValue(spi4_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi4_dec));
- TEST_ASSERT_EQUAL_INT(-61, StepPositionInformation_getValue(spi5_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi5_dec));
- TEST_ASSERT_EQUAL_INT(-62, StepPositionInformation_getValue(spi6_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi6_dec));
- TEST_ASSERT_EQUAL_INT(-63, StepPositionInformation_getValue(spi7_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi7_dec));
- TEST_ASSERT_EQUAL_INT(-0, StepPositionInformation_getValue(spi8_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient(spi8_dec));
- StepPositionInformation_destroy(spi1_dec);
- StepPositionInformation_destroy(spi2_dec);
- StepPositionInformation_destroy(spi3_dec);
- StepPositionInformation_destroy(spi4_dec);
- StepPositionInformation_destroy(spi5_dec);
- StepPositionInformation_destroy(spi6_dec);
- StepPositionInformation_destroy(spi7_dec);
- StepPositionInformation_destroy(spi8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_StepPositionWithCP24Time2a(void)
- {
- StepPositionWithCP24Time2a spi1;
- StepPositionWithCP24Time2a spi2;
- StepPositionWithCP24Time2a spi3;
- StepPositionWithCP24Time2a spi4;
- StepPositionWithCP24Time2a spi5;
- StepPositionWithCP24Time2a spi6;
- StepPositionWithCP24Time2a spi7;
- StepPositionWithCP24Time2a spi8;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- uint64_t time4 = time3 + 1000;
- uint64_t time5 = time4 + 1000;
- uint64_t time6 = time5 + 1000;
- uint64_t time7 = time6 + 1000;
- uint64_t time8 = time7 + 1000;
- struct sCP24Time2a cpTime1;
- struct sCP24Time2a cpTime2;
- struct sCP24Time2a cpTime3;
- struct sCP24Time2a cpTime4;
- struct sCP24Time2a cpTime5;
- struct sCP24Time2a cpTime6;
- struct sCP24Time2a cpTime7;
- struct sCP24Time2a cpTime8;
- bzero(&cpTime1, sizeof(struct sCP24Time2a));
- bzero(&cpTime2, sizeof(struct sCP24Time2a));
- bzero(&cpTime3, sizeof(struct sCP24Time2a));
- bzero(&cpTime4, sizeof(struct sCP24Time2a));
- bzero(&cpTime5, sizeof(struct sCP24Time2a));
- bzero(&cpTime6, sizeof(struct sCP24Time2a));
- bzero(&cpTime7, sizeof(struct sCP24Time2a));
- bzero(&cpTime8, sizeof(struct sCP24Time2a));
- CP24Time2a_setMinute(&cpTime1, 12);
- CP24Time2a_setMillisecond(&cpTime1, 24123);
- CP24Time2a_setMinute(&cpTime2, 54);
- CP24Time2a_setMillisecond(&cpTime2, 12345);
- CP24Time2a_setMinute(&cpTime3, 00);
- CP24Time2a_setMillisecond(&cpTime3, 00001);
- CP24Time2a_setMinute(&cpTime4, 12);
- CP24Time2a_setMillisecond(&cpTime4, 24123);
- CP24Time2a_setMinute(&cpTime5, 12);
- CP24Time2a_setMillisecond(&cpTime5, 24123);
- CP24Time2a_setMinute(&cpTime6, 12);
- CP24Time2a_setMillisecond(&cpTime6, 24123);
- CP24Time2a_setMinute(&cpTime7, 12);
- CP24Time2a_setMillisecond(&cpTime7, 24123);
- CP24Time2a_setMinute(&cpTime8, 12);
- CP24Time2a_setMillisecond(&cpTime8, 24123);
- spi1 = StepPositionWithCP24Time2a_create(NULL, 101, 0, true, IEC60870_QUALITY_GOOD, &cpTime1);
- spi2 = StepPositionWithCP24Time2a_create(NULL, 102, 63, false, IEC60870_QUALITY_OVERFLOW, &cpTime2);
- spi3 = StepPositionWithCP24Time2a_create(NULL, 103, 62, false, IEC60870_QUALITY_RESERVED, &cpTime3);
- spi4 = StepPositionWithCP24Time2a_create(NULL, 104, 61, false, IEC60870_QUALITY_ELAPSED_TIME_INVALID, &cpTime4);
- spi5 = StepPositionWithCP24Time2a_create(NULL, 105, -61, false, IEC60870_QUALITY_BLOCKED, &cpTime5);
- spi6 = StepPositionWithCP24Time2a_create(NULL, 106, -62, false, IEC60870_QUALITY_SUBSTITUTED, &cpTime6);
- spi7 = StepPositionWithCP24Time2a_create(NULL, 107, -63, false, IEC60870_QUALITY_NON_TOPICAL, &cpTime7);
- spi8 = StepPositionWithCP24Time2a_create(NULL, 108, 0, false, IEC60870_QUALITY_INVALID, &cpTime8);
- TEST_ASSERT_EQUAL_INT(0, StepPositionInformation_getValue((StepPositionInformation)spi1));
- TEST_ASSERT_TRUE(StepPositionInformation_isTransient((StepPositionInformation)spi1));
- TEST_ASSERT_EQUAL_INT(63, StepPositionInformation_getValue((StepPositionInformation)spi2));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi2));
- TEST_ASSERT_EQUAL_INT(62, StepPositionInformation_getValue((StepPositionInformation)spi3));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi3));
- TEST_ASSERT_EQUAL_INT(61, StepPositionInformation_getValue((StepPositionInformation)spi4));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi4));
- TEST_ASSERT_EQUAL_INT(-61, StepPositionInformation_getValue((StepPositionInformation)spi5));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi5));
- TEST_ASSERT_EQUAL_INT(-62, StepPositionInformation_getValue((StepPositionInformation)spi6));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi6));
- TEST_ASSERT_EQUAL_INT(-63, StepPositionInformation_getValue((StepPositionInformation)spi7));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi7));
- TEST_ASSERT_EQUAL_INT(0, StepPositionInformation_getValue((StepPositionInformation)spi8));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi8));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, StepPositionInformation_getQuality((StepPositionInformation)spi1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, StepPositionInformation_getQuality((StepPositionInformation)spi2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, StepPositionInformation_getQuality((StepPositionInformation)spi3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, StepPositionInformation_getQuality((StepPositionInformation)spi4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, StepPositionInformation_getQuality((StepPositionInformation)spi5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, StepPositionInformation_getQuality((StepPositionInformation)spi6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, StepPositionInformation_getQuality((StepPositionInformation)spi7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, StepPositionInformation_getQuality((StepPositionInformation)spi8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi8);
- StepPositionWithCP24Time2a_destroy(spi1);
- StepPositionWithCP24Time2a_destroy(spi2);
- StepPositionWithCP24Time2a_destroy(spi3);
- StepPositionWithCP24Time2a_destroy(spi4);
- StepPositionWithCP24Time2a_destroy(spi5);
- StepPositionWithCP24Time2a_destroy(spi6);
- StepPositionWithCP24Time2a_destroy(spi7);
- StepPositionWithCP24Time2a_destroy(spi8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(70, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- StepPositionWithCP24Time2a spi1_dec = (StepPositionWithCP24Time2a) CS101_ASDU_getElement(asdu2, 0);
- StepPositionWithCP24Time2a spi2_dec = (StepPositionWithCP24Time2a) CS101_ASDU_getElement(asdu2, 1);
- StepPositionWithCP24Time2a spi3_dec = (StepPositionWithCP24Time2a) CS101_ASDU_getElement(asdu2, 2);
- StepPositionWithCP24Time2a spi4_dec = (StepPositionWithCP24Time2a) CS101_ASDU_getElement(asdu2, 3);
- StepPositionWithCP24Time2a spi5_dec = (StepPositionWithCP24Time2a) CS101_ASDU_getElement(asdu2, 4);
- StepPositionWithCP24Time2a spi6_dec = (StepPositionWithCP24Time2a) CS101_ASDU_getElement(asdu2, 5);
- StepPositionWithCP24Time2a spi7_dec = (StepPositionWithCP24Time2a) CS101_ASDU_getElement(asdu2, 6);
- StepPositionWithCP24Time2a spi8_dec = (StepPositionWithCP24Time2a) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject)spi1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject)spi2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject)spi3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject)spi4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject)spi5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject)spi6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject)spi7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject)spi8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, StepPositionInformation_getQuality((StepPositionInformation)spi1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, StepPositionInformation_getQuality((StepPositionInformation)spi2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, StepPositionInformation_getQuality((StepPositionInformation)spi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, StepPositionInformation_getQuality((StepPositionInformation)spi4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, StepPositionInformation_getQuality((StepPositionInformation)spi5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, StepPositionInformation_getQuality((StepPositionInformation)spi6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, StepPositionInformation_getQuality((StepPositionInformation)spi7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, StepPositionInformation_getQuality((StepPositionInformation)spi8_dec));
- TEST_ASSERT_EQUAL_INT(0, StepPositionInformation_getValue((StepPositionInformation)spi1_dec));
- TEST_ASSERT_TRUE(StepPositionInformation_isTransient((StepPositionInformation)spi1_dec));
- TEST_ASSERT_EQUAL_INT(63, StepPositionInformation_getValue((StepPositionInformation)spi2_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi2_dec));
- TEST_ASSERT_EQUAL_INT(62, StepPositionInformation_getValue((StepPositionInformation)spi3_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi3_dec));
- TEST_ASSERT_EQUAL_INT(61, StepPositionInformation_getValue((StepPositionInformation)spi4_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi4_dec));
- TEST_ASSERT_EQUAL_INT(-61, StepPositionInformation_getValue((StepPositionInformation)spi5_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi5_dec));
- TEST_ASSERT_EQUAL_INT(-62, StepPositionInformation_getValue((StepPositionInformation)spi6_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi6_dec));
- TEST_ASSERT_EQUAL_INT(-63, StepPositionInformation_getValue((StepPositionInformation)spi7_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi7_dec));
- TEST_ASSERT_EQUAL_INT(-0, StepPositionInformation_getValue((StepPositionInformation)spi8_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi8_dec));
- CP24Time2a time1_dec = StepPositionWithCP24Time2a_getTimestamp(spi1_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time1_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time1_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time1_dec));
- CP24Time2a time2_dec = StepPositionWithCP24Time2a_getTimestamp(spi2_dec);
- TEST_ASSERT_EQUAL_INT(54, CP24Time2a_getMinute(time2_dec));
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getSecond(time2_dec));
- TEST_ASSERT_EQUAL_INT(345, CP24Time2a_getMillisecond(time2_dec));
- CP24Time2a time3_dec = StepPositionWithCP24Time2a_getTimestamp(spi3_dec);
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getMinute(time3_dec));
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getSecond(time3_dec));
- TEST_ASSERT_EQUAL_INT(1, CP24Time2a_getMillisecond(time3_dec));
- CP24Time2a time4_dec = StepPositionWithCP24Time2a_getTimestamp(spi4_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time4_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time4_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time4_dec));
- CP24Time2a time5_dec = StepPositionWithCP24Time2a_getTimestamp(spi5_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time5_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time5_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time5_dec));
- CP24Time2a time6_dec = StepPositionWithCP24Time2a_getTimestamp(spi6_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time6_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time6_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time6_dec));
- CP24Time2a time7_dec = StepPositionWithCP24Time2a_getTimestamp(spi7_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time7_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time7_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time7_dec));
- CP24Time2a time8_dec = StepPositionWithCP24Time2a_getTimestamp(spi8_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time8_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time8_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time8_dec));
- StepPositionWithCP24Time2a_destroy(spi1_dec);
- StepPositionWithCP24Time2a_destroy(spi2_dec);
- StepPositionWithCP24Time2a_destroy(spi3_dec);
- StepPositionWithCP24Time2a_destroy(spi4_dec);
- StepPositionWithCP24Time2a_destroy(spi5_dec);
- StepPositionWithCP24Time2a_destroy(spi6_dec);
- StepPositionWithCP24Time2a_destroy(spi7_dec);
- StepPositionWithCP24Time2a_destroy(spi8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_StepPositionWithCP56Time2a(void)
- {
- StepPositionWithCP56Time2a spi1;
- StepPositionWithCP56Time2a spi2;
- StepPositionWithCP56Time2a spi3;
- StepPositionWithCP56Time2a spi4;
- StepPositionWithCP56Time2a spi5;
- StepPositionWithCP56Time2a spi6;
- StepPositionWithCP56Time2a spi7;
- StepPositionWithCP56Time2a spi8;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- uint64_t time4 = time3 + 1000;
- uint64_t time5 = time4 + 1000;
- uint64_t time6 = time5 + 1000;
- uint64_t time7 = time6 + 1000;
- uint64_t time8 = time7 + 1000;
- struct sCP56Time2a cpTime1;
- struct sCP56Time2a cpTime2;
- struct sCP56Time2a cpTime3;
- struct sCP56Time2a cpTime4;
- struct sCP56Time2a cpTime5;
- struct sCP56Time2a cpTime6;
- struct sCP56Time2a cpTime7;
- struct sCP56Time2a cpTime8;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- CP56Time2a_createFromMsTimestamp(&cpTime2, time2);
- CP56Time2a_createFromMsTimestamp(&cpTime3, time3);
- CP56Time2a_createFromMsTimestamp(&cpTime4, time4);
- CP56Time2a_createFromMsTimestamp(&cpTime5, time5);
- CP56Time2a_createFromMsTimestamp(&cpTime6, time6);
- CP56Time2a_createFromMsTimestamp(&cpTime7, time7);
- CP56Time2a_createFromMsTimestamp(&cpTime8, time8);
- spi1 = StepPositionWithCP56Time2a_create(NULL, 101, 0, true, IEC60870_QUALITY_GOOD, &cpTime1);
- spi2 = StepPositionWithCP56Time2a_create(NULL, 102, 63, false, IEC60870_QUALITY_OVERFLOW, &cpTime2);
- spi3 = StepPositionWithCP56Time2a_create(NULL, 103, 62, false, IEC60870_QUALITY_RESERVED, &cpTime3);
- spi4 = StepPositionWithCP56Time2a_create(NULL, 104, 61, false, IEC60870_QUALITY_ELAPSED_TIME_INVALID, &cpTime4);
- spi5 = StepPositionWithCP56Time2a_create(NULL, 105, -61, false, IEC60870_QUALITY_BLOCKED, &cpTime5);
- spi6 = StepPositionWithCP56Time2a_create(NULL, 106, -62, false, IEC60870_QUALITY_SUBSTITUTED, &cpTime6);
- spi7 = StepPositionWithCP56Time2a_create(NULL, 107, -63, false, IEC60870_QUALITY_NON_TOPICAL, &cpTime7);
- spi8 = StepPositionWithCP56Time2a_create(NULL, 108, 0, false, IEC60870_QUALITY_INVALID, &cpTime8);
- TEST_ASSERT_EQUAL_INT(0, StepPositionInformation_getValue((StepPositionInformation)spi1));
- TEST_ASSERT_TRUE(StepPositionInformation_isTransient((StepPositionInformation)spi1));
- TEST_ASSERT_EQUAL_INT(63, StepPositionInformation_getValue((StepPositionInformation)spi2));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi2));
- TEST_ASSERT_EQUAL_INT(62, StepPositionInformation_getValue((StepPositionInformation)spi3));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi3));
- TEST_ASSERT_EQUAL_INT(61, StepPositionInformation_getValue((StepPositionInformation)spi4));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi4));
- TEST_ASSERT_EQUAL_INT(-61, StepPositionInformation_getValue((StepPositionInformation)spi5));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi5));
- TEST_ASSERT_EQUAL_INT(-62, StepPositionInformation_getValue((StepPositionInformation)spi6));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi6));
- TEST_ASSERT_EQUAL_INT(-63, StepPositionInformation_getValue((StepPositionInformation)spi7));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi7));
- TEST_ASSERT_EQUAL_INT(0, StepPositionInformation_getValue((StepPositionInformation)spi8));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi8));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, StepPositionInformation_getQuality((StepPositionInformation)spi1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, StepPositionInformation_getQuality((StepPositionInformation)spi2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, StepPositionInformation_getQuality((StepPositionInformation)spi3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, StepPositionInformation_getQuality((StepPositionInformation)spi4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, StepPositionInformation_getQuality((StepPositionInformation)spi5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, StepPositionInformation_getQuality((StepPositionInformation)spi6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, StepPositionInformation_getQuality((StepPositionInformation)spi7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, StepPositionInformation_getQuality((StepPositionInformation)spi8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi8);
- StepPositionWithCP56Time2a_destroy(spi1);
- StepPositionWithCP56Time2a_destroy(spi2);
- StepPositionWithCP56Time2a_destroy(spi3);
- StepPositionWithCP56Time2a_destroy(spi4);
- StepPositionWithCP56Time2a_destroy(spi5);
- StepPositionWithCP56Time2a_destroy(spi6);
- StepPositionWithCP56Time2a_destroy(spi7);
- StepPositionWithCP56Time2a_destroy(spi8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(102, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- StepPositionWithCP56Time2a spi1_dec = (StepPositionWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- StepPositionWithCP56Time2a spi2_dec = (StepPositionWithCP56Time2a) CS101_ASDU_getElement(asdu2, 1);
- StepPositionWithCP56Time2a spi3_dec = (StepPositionWithCP56Time2a) CS101_ASDU_getElement(asdu2, 2);
- StepPositionWithCP56Time2a spi4_dec = (StepPositionWithCP56Time2a) CS101_ASDU_getElement(asdu2, 3);
- StepPositionWithCP56Time2a spi5_dec = (StepPositionWithCP56Time2a) CS101_ASDU_getElement(asdu2, 4);
- StepPositionWithCP56Time2a spi6_dec = (StepPositionWithCP56Time2a) CS101_ASDU_getElement(asdu2, 5);
- StepPositionWithCP56Time2a spi7_dec = (StepPositionWithCP56Time2a) CS101_ASDU_getElement(asdu2, 6);
- StepPositionWithCP56Time2a spi8_dec = (StepPositionWithCP56Time2a) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject)spi1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject)spi2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject)spi3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject)spi4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject)spi5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject)spi6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject)spi7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject)spi8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, StepPositionInformation_getQuality((StepPositionInformation)spi1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, StepPositionInformation_getQuality((StepPositionInformation)spi2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, StepPositionInformation_getQuality((StepPositionInformation)spi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, StepPositionInformation_getQuality((StepPositionInformation)spi4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, StepPositionInformation_getQuality((StepPositionInformation)spi5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, StepPositionInformation_getQuality((StepPositionInformation)spi6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, StepPositionInformation_getQuality((StepPositionInformation)spi7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, StepPositionInformation_getQuality((StepPositionInformation)spi8_dec));
- TEST_ASSERT_EQUAL_INT(0, StepPositionInformation_getValue((StepPositionInformation)spi1_dec));
- TEST_ASSERT_TRUE(StepPositionInformation_isTransient((StepPositionInformation)spi1_dec));
- TEST_ASSERT_EQUAL_INT(63, StepPositionInformation_getValue((StepPositionInformation)spi2_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi2_dec));
- TEST_ASSERT_EQUAL_INT(62, StepPositionInformation_getValue((StepPositionInformation)spi3_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi3_dec));
- TEST_ASSERT_EQUAL_INT(61, StepPositionInformation_getValue((StepPositionInformation)spi4_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi4_dec));
- TEST_ASSERT_EQUAL_INT(-61, StepPositionInformation_getValue((StepPositionInformation)spi5_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi5_dec));
- TEST_ASSERT_EQUAL_INT(-62, StepPositionInformation_getValue((StepPositionInformation)spi6_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi6_dec));
- TEST_ASSERT_EQUAL_INT(-63, StepPositionInformation_getValue((StepPositionInformation)spi7_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi7_dec));
- TEST_ASSERT_EQUAL_INT(-0, StepPositionInformation_getValue((StepPositionInformation)spi8_dec));
- TEST_ASSERT_FALSE(StepPositionInformation_isTransient((StepPositionInformation)spi8_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(StepPositionWithCP56Time2a_getTimestamp(spi1_dec)));
- TEST_ASSERT_EQUAL_UINT64(time2, CP56Time2a_toMsTimestamp(StepPositionWithCP56Time2a_getTimestamp(spi2_dec)));
- TEST_ASSERT_EQUAL_UINT64(time3, CP56Time2a_toMsTimestamp(StepPositionWithCP56Time2a_getTimestamp(spi3_dec)));
- TEST_ASSERT_EQUAL_UINT64(time4, CP56Time2a_toMsTimestamp(StepPositionWithCP56Time2a_getTimestamp(spi4_dec)));
- TEST_ASSERT_EQUAL_UINT64(time5, CP56Time2a_toMsTimestamp(StepPositionWithCP56Time2a_getTimestamp(spi5_dec)));
- TEST_ASSERT_EQUAL_UINT64(time6, CP56Time2a_toMsTimestamp(StepPositionWithCP56Time2a_getTimestamp(spi6_dec)));
- TEST_ASSERT_EQUAL_UINT64(time7, CP56Time2a_toMsTimestamp(StepPositionWithCP56Time2a_getTimestamp(spi7_dec)));
- TEST_ASSERT_EQUAL_UINT64(time8, CP56Time2a_toMsTimestamp(StepPositionWithCP56Time2a_getTimestamp(spi8_dec)));
- StepPositionWithCP56Time2a_destroy(spi1_dec);
- StepPositionWithCP56Time2a_destroy(spi2_dec);
- StepPositionWithCP56Time2a_destroy(spi3_dec);
- StepPositionWithCP56Time2a_destroy(spi4_dec);
- StepPositionWithCP56Time2a_destroy(spi5_dec);
- StepPositionWithCP56Time2a_destroy(spi6_dec);
- StepPositionWithCP56Time2a_destroy(spi7_dec);
- StepPositionWithCP56Time2a_destroy(spi8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_addMaxNumberOfIOsToASDU(void)
- {
- struct sCS101_AppLayerParameters salParameters;
- salParameters.maxSizeOfASDU = 100;
- salParameters.originatorAddress = 0;
- salParameters.sizeOfCA = 2;
- salParameters.sizeOfCOT = 2;
- salParameters.sizeOfIOA = 3;
- salParameters.sizeOfTypeId = 1;
- salParameters.sizeOfVSQ = 1;
- CS101_ASDU asdu = CS101_ASDU_create(&salParameters, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- int ioa = 100;
- bool added = false;
- do {
- InformationObject io = (InformationObject) SinglePointInformation_create(NULL, ioa, true, IEC60870_QUALITY_GOOD);
- added = CS101_ASDU_addInformationObject(asdu, io);
- InformationObject_destroy(io);
- ioa++;
- }
- while (added);
- CS101_ASDU_destroy(asdu);
- TEST_ASSERT_EQUAL_INT(124, ioa);
- }
- void
- test_SingleEventType(void)
- {
- tSingleEvent singleEvent = 0;
- EventState eventState = SingleEvent_getEventState(&singleEvent);
- TEST_ASSERT_EQUAL_INT(IEC60870_EVENTSTATE_INDETERMINATE_0, eventState);
- QualityDescriptorP qdp = SingleEvent_getQDP(&singleEvent);
- TEST_ASSERT_EQUAL_INT(0, qdp);
- }
- void
- test_EventOfProtectionEquipmentWithTime(void)
- {
- #ifndef _WIN32
- tSingleEvent singleEvent = 0;
- struct sCP16Time2a elapsedTime;
- struct sCP56Time2a timestamp;
- EventOfProtectionEquipmentWithCP56Time2a e = EventOfProtectionEquipmentWithCP56Time2a_create(NULL, 1, &singleEvent, &elapsedTime, ×tamp);
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) e);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) e);
- CS101_ASDU_encode(asdu, f);
- InformationObject_destroy((InformationObject) e);
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- InformationObject io = CS101_ASDU_getElement(asdu2, 1);
- TEST_ASSERT_NOT_NULL(io);
- EventOfProtectionEquipmentWithCP56Time2a e2 = (EventOfProtectionEquipmentWithCP56Time2a) io;
- SingleEvent se = EventOfProtectionEquipmentWithCP56Time2a_getEvent(e2);
- QualityDescriptorP qdp = SingleEvent_getQDP(se);
- InformationObject_destroy(io);
- CS101_ASDU_destroy(asdu2);
- TEST_ASSERT_EQUAL_INT(0, qdp);
- #endif
- }
- struct test_CS104SlaveConnectionIsRedundancyGroup_Info
- {
- bool running;
- CS104_Slave slave;
- };
- static void*
- test_CS104SlaveConnectionIsRedundancyGroup_enqueueThreadFunction(void* parameter)
- {
- struct test_CS104SlaveConnectionIsRedundancyGroup_Info* info = (struct test_CS104SlaveConnectionIsRedundancyGroup_Info*) parameter;
- CS101_AppLayerParameters alParams = CS104_Slave_getAppLayerParameters(info->slave);
- int16_t scaledValue = 0;
- while (info->running) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_PERIODIC, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, scaledValue, IEC60870_QUALITY_GOOD);
- scaledValue++;
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(info->slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- Thread_sleep(10);
- }
- return NULL;
- }
- void
- test_CS104SlaveConnectionIsRedundancyGroup()
- {
- CS104_Slave slave = CS104_Slave_create(100, 100);
- CS104_Slave_setServerMode(slave, CS104_MODE_CONNECTION_IS_REDUNDANCY_GROUP);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- struct test_CS104SlaveConnectionIsRedundancyGroup_Info info;
- info.running = true;
- info.slave = slave;
- Thread enqueueThread = Thread_create(test_CS104SlaveConnectionIsRedundancyGroup_enqueueThreadFunction, &info, false);
- Thread_start(enqueueThread);
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 20004);
- int i;
- for (i = 0; i < 50; i++) {
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- Thread_sleep(10);
- CS104_Connection_close(con);
- }
- info.running = false;
- Thread_destroy(enqueueThread);
- CS104_Connection_destroy(con);
- CS104_Slave_destroy(slave);
- }
- void
- test_CS104SlaveSingleRedundancyGroup()
- {
- CS104_Slave slave = CS104_Slave_create(100, 100);
- CS104_Slave_setServerMode(slave, CS104_MODE_SINGLE_REDUNDANCY_GROUP);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- struct test_CS104SlaveConnectionIsRedundancyGroup_Info info;
- info.running = true;
- info.slave = slave;
- Thread enqueueThread = Thread_create(test_CS104SlaveConnectionIsRedundancyGroup_enqueueThreadFunction, &info, false);
- Thread_start(enqueueThread);
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 20004);
- int i;
- for (i = 0; i < 50; i++) {
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- CS104_Connection_close(con);
- Thread_sleep(10);
- }
- info.running = false;
- Thread_destroy(enqueueThread);
- CS104_Connection_destroy(con);
- CS104_Slave_destroy(slave);
- }
- static void
- test_CS104SlaveSingleRedundancyGroupMultipleConnectionsEventHandler(void* parameter, IMasterConnection connection, CS104_PeerConnectionEvent event)
- {
- char ipAddrBuf[100];
- ipAddrBuf[0] = 0;
- IMasterConnection_getPeerAddress(connection, ipAddrBuf, 100);
- }
- void
- test_CS104SlaveSingleRedundancyGroupMultipleConnections()
- {
- CS104_Slave slave = CS104_Slave_create(100, 100);
- CS104_Slave_setServerMode(slave, CS104_MODE_SINGLE_REDUNDANCY_GROUP);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Slave_setMaxOpenConnections(slave, 20);
- CS104_Slave_setConnectionEventHandler(slave, test_CS104SlaveSingleRedundancyGroupMultipleConnectionsEventHandler, NULL);
- struct test_CS104SlaveConnectionIsRedundancyGroup_Info info;
- info.running = true;
- info.slave = slave;
- CS104_Connection cons[3];
- int conState[3]; /* 0 = idle, 1 = connected, 2 = START_DT sent */
- cons[0] = CS104_Connection_create("127.0.0.1", 20004);
- cons[1] = CS104_Connection_create("127.0.0.1", 20004);
- cons[2] = CS104_Connection_create("127.0.0.1", 20004);
- conState[0] = 0;
- conState[1] = 0;
- conState[2] = 0;
- Thread enqueueThread = Thread_create(test_CS104SlaveConnectionIsRedundancyGroup_enqueueThreadFunction, &info, false);
- Thread_start(enqueueThread);
- int i;
- for (i = 0; i < 200; i++)
- {
- // printf("round %i\n", i);
- int con = rand() % 3;
- if (conState[con] == 0) {
- bool result = CS104_Connection_connect(cons[con]);
- TEST_ASSERT_TRUE(result);
- conState[con] = 1;
- }
- else if (conState[con] == 1) {
- CS104_Connection_sendStartDT(cons[con]);
- conState[con] = 2;
- }
- else if (conState[con] == 2) {
- CS104_Connection_close(cons[con]);
- conState[con] = 0;
- }
- Thread_sleep(50);
- }
- CS104_Connection_destroy(cons[0]);
- CS104_Connection_destroy(cons[1]);
- CS104_Connection_destroy(cons[2]);
- info.running = false;
- Thread_destroy(enqueueThread);
- CS104_Slave_destroy(slave);
- }
- struct stest_CS104SlaveEventQueue1 {
- int asduHandlerCalled;
- int spontCount;
- int16_t lastScaledValue;
- };
- static bool
- test_CS104SlaveEventQueue1_asduReceivedHandler (void* parameter, int address, CS101_ASDU asdu)
- {
- struct stest_CS104SlaveEventQueue1* info = (struct stest_CS104SlaveEventQueue1*) parameter;
- info->asduHandlerCalled++;
- if (CS101_ASDU_getCOT(asdu) == CS101_COT_SPONTANEOUS)
- {
- info->spontCount++;
- if (CS101_ASDU_getTypeID(asdu) == M_ME_NB_1)
- {
- static uint8_t ioBuf[250];
- MeasuredValueScaled mv = (MeasuredValueScaled) CS101_ASDU_getElementEx(asdu, (InformationObject) ioBuf, 0);
- info->lastScaledValue = MeasuredValueScaled_getValue(mv);
- }
- }
- return true;
- }
- struct sTestMessageQueueEntryInfo {
- uint64_t entryTimestamp;
- unsigned int entryState : 2;
- unsigned int size : 8;
- };
- void
- test_CS104SlaveEventQueue1()
- {
- CS104_Slave slave = CS104_Slave_create(10, 10);
- CS104_Slave_setServerMode(slave, CS104_MODE_SINGLE_REDUNDANCY_GROUP);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS101_AppLayerParameters alParams = CS104_Slave_getAppLayerParameters(slave);
- struct stest_CS104SlaveEventQueue1 info;
- info.asduHandlerCalled = 0;
- info.spontCount = 0;
- info.lastScaledValue = 0;
- int16_t scaledValue = 0;
- for (int i = 0; i < 15; i++) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, scaledValue, IEC60870_QUALITY_GOOD);
- scaledValue++;
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- }
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 20004);
- CS104_Connection_setASDUReceivedHandler(con, test_CS104SlaveEventQueue1_asduReceivedHandler, &info);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- Thread_sleep(500);
- CS104_Connection_sendStopDT(con);
- CS104_Connection_close(con);
- TEST_ASSERT_EQUAL_INT(14, info.lastScaledValue);
- info.asduHandlerCalled = 0;
- info.spontCount = 0;
- result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- for (int i = 0; i < 15; i++) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, scaledValue, IEC60870_QUALITY_GOOD);
- scaledValue++;
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- Thread_sleep(10);
- }
- Thread_sleep(500);
- CS104_Connection_close(con);
- TEST_ASSERT_EQUAL_INT(15, info.asduHandlerCalled);
- TEST_ASSERT_EQUAL_INT(15, info.spontCount);
- TEST_ASSERT_EQUAL_INT(29, info.lastScaledValue);
- CS104_Connection_destroy(con);
- CS104_Slave_destroy(slave);
- }
- void
- test_CS104SlaveEventQueueOverflow()
- {
- CS104_Slave slave = CS104_Slave_create(10, 10);
- CS104_Slave_setServerMode(slave, CS104_MODE_SINGLE_REDUNDANCY_GROUP);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS101_AppLayerParameters alParams = CS104_Slave_getAppLayerParameters(slave);
- struct stest_CS104SlaveEventQueue1 info;
- info.asduHandlerCalled = 0;
- info.spontCount = 0;
- info.lastScaledValue = 0;
- int16_t scaledValue = 0;
- for (int i = 0; i < 300; i++) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, scaledValue, IEC60870_QUALITY_GOOD);
- scaledValue++;
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- }
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 20004);
- CS104_Connection_setASDUReceivedHandler(con, test_CS104SlaveEventQueue1_asduReceivedHandler, &info);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- Thread_sleep(1500);
- CS104_Connection_close(con);
- int asduSize = 12;
- int entrySize = sizeof(struct sTestMessageQueueEntryInfo) + asduSize;
- int msgQueueCapacity = ((sizeof(struct sTestMessageQueueEntryInfo) + 256) * 10) / entrySize;
- TEST_ASSERT_EQUAL_INT(299, info.lastScaledValue);
- TEST_ASSERT_EQUAL_INT(msgQueueCapacity, info.asduHandlerCalled);
- result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- for (int i = 0; i < 150; i++) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, scaledValue, IEC60870_QUALITY_GOOD);
- scaledValue++;
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- Thread_sleep(10);
- }
- Thread_sleep(500);
- CS104_Connection_close(con);
- TEST_ASSERT_EQUAL_INT(msgQueueCapacity + 150, info.asduHandlerCalled);
- TEST_ASSERT_EQUAL_INT(msgQueueCapacity + 150, info.spontCount);
- TEST_ASSERT_EQUAL_INT(449, info.lastScaledValue);
- CS104_Connection_destroy(con);
- CS104_Slave_destroy(slave);
- }
- void
- test_CS104SlaveEventQueueOverflow2()
- {
- CS104_Slave slave = CS104_Slave_create(10, 10);
- CS104_Slave_setServerMode(slave, CS104_MODE_SINGLE_REDUNDANCY_GROUP);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS101_AppLayerParameters alParams = CS104_Slave_getAppLayerParameters(slave);
- struct stest_CS104SlaveEventQueue1 info;
- info.asduHandlerCalled = 0;
- info.spontCount = 0;
- info.lastScaledValue = 0;
- int16_t scaledValue = 0;
- for (int i = 0; i < 300; i++) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, scaledValue, IEC60870_QUALITY_GOOD);
- scaledValue++;
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- }
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 20004);
- CS104_Connection_setASDUReceivedHandler(con, test_CS104SlaveEventQueue1_asduReceivedHandler, &info);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- Thread_sleep(500);
- CS104_Connection_close(con);
- int asduSize = 12;
- int entrySize = sizeof(struct sTestMessageQueueEntryInfo) + asduSize;
- int msgQueueCapacity = ((sizeof(struct sTestMessageQueueEntryInfo) + 256) * 10) / entrySize;
- TEST_ASSERT_EQUAL_INT(299, info.lastScaledValue);
- TEST_ASSERT_EQUAL_INT(msgQueueCapacity, info.asduHandlerCalled);
- result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- int typeNo = 0;
- for (int i = 0; i < 20000; i++) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io;
- if (typeNo == 0) {
- io = (InformationObject) MeasuredValueScaled_create(NULL, 110, scaledValue, IEC60870_QUALITY_GOOD);
- CS101_ASDU_addInformationObject(newAsdu, io);
- }
- else if (typeNo == 1) {
- struct sCP56Time2a cp56;
- CP56Time2a_createFromMsTimestamp(&cp56, Hal_getTimeInMs());
- io = (InformationObject) MeasuredValueScaledWithCP56Time2a_create(NULL, 111, scaledValue, IEC60870_QUALITY_GOOD, &cp56);
- CS101_ASDU_addInformationObject(newAsdu, io);
- }
- else if (typeNo == 2) {
- io = (InformationObject) SinglePointInformation_create(NULL, 112, true, IEC60870_QUALITY_GOOD);
- CS101_ASDU_addInformationObject(newAsdu, io);
- }
- else if (typeNo == 3) {
- io = (InformationObject) SinglePointInformation_create(NULL, 112, true, IEC60870_QUALITY_GOOD);
- int j = 1;
- while (CS101_ASDU_addInformationObject(newAsdu, io)) {
- io = (InformationObject) SinglePointInformation_create((SinglePointInformation) io, 112 + j, true, IEC60870_QUALITY_GOOD);
- j++;
- }
- }
- typeNo++;
- if (typeNo == 4)
- typeNo = 0;
- scaledValue++;
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- //Thread_sleep(10);
- }
- Thread_sleep(500);
- CS104_Connection_close(con);
- CS104_Connection_destroy(con);
- CS104_Slave_destroy(slave);
- }
- void
- test_CS104SlaveEventQueueCheckCapacity()
- {
- CS104_Slave slave = CS104_Slave_create(2, 2);
- CS104_Slave_setServerMode(slave, CS104_MODE_SINGLE_REDUNDANCY_GROUP);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS101_AppLayerParameters alParams = CS104_Slave_getAppLayerParameters(slave);
- struct stest_CS104SlaveEventQueue1 info;
- info.asduHandlerCalled = 0;
- info.spontCount = 0;
- info.lastScaledValue = 0;
- int16_t scaledValue = 0;
- /* Fill queue with small messages */
- int asduSize = 6 + 3 + 1;
- int entrySize = sizeof(struct sTestMessageQueueEntryInfo) + asduSize;
- int msgQueueCapacity = ((sizeof(struct sTestMessageQueueEntryInfo) + 256) * 2) / entrySize;
- for (int i = 0; i < 299; i++) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) SinglePointInformation_create(NULL, 101, true, IEC60870_QUALITY_GOOD);
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- if (i >= msgQueueCapacity)
- TEST_ASSERT_EQUAL_INT(msgQueueCapacity, CS104_Slave_getNumberOfQueueEntries(slave, NULL));
- else
- TEST_ASSERT_EQUAL_INT(i + 1, CS104_Slave_getNumberOfQueueEntries(slave, NULL));
- CS101_ASDU_destroy(newAsdu);
- }
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 20004);
- CS104_Connection_setASDUReceivedHandler(con, test_CS104SlaveEventQueue1_asduReceivedHandler, &info);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- Thread_sleep(1000);
- CS104_Connection_close(con);
- TEST_ASSERT_EQUAL_INT(msgQueueCapacity, info.asduHandlerCalled);
- /* outstanding I messages that are not confirmed */
- TEST_ASSERT_EQUAL_INT(0, CS104_Slave_getNumberOfQueueEntries(slave, NULL));
- CS104_Connection_destroy(con);
- CS104_Slave_destroy(slave);
- }
- void
- test_CS104SlaveEventQueueOverflow3()
- {
- /**
- * Trigger code to remove multiple messages at once from the buffer
- */
- CS104_Slave slave = CS104_Slave_create(2, 2);
- CS104_Slave_setServerMode(slave, CS104_MODE_SINGLE_REDUNDANCY_GROUP);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS101_AppLayerParameters alParams = CS104_Slave_getAppLayerParameters(slave);
- struct stest_CS104SlaveEventQueue1 info;
- info.asduHandlerCalled = 0;
- info.spontCount = 0;
- info.lastScaledValue = 0;
- int16_t scaledValue = 0;
- /* Fill queue with small messages */
- int asduSize = 6 + 3 + 1;
- int entrySize = sizeof(struct sTestMessageQueueEntryInfo) + asduSize;
- int msgQueueCapacity = ((sizeof(struct sTestMessageQueueEntryInfo) + 256) * 2) / entrySize;
- for (int i = 0; i < 35; i++) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) SinglePointInformation_create(NULL, 101, true, IEC60870_QUALITY_GOOD);
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- }
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 20004);
- CS104_Connection_setASDUReceivedHandler(con, test_CS104SlaveEventQueue1_asduReceivedHandler, &info);
- int count1 = CS104_Slave_getNumberOfQueueEntries(slave, NULL);
- /* add a single large messages */
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_PERIODIC, 0, 1, false, false);
- for (int i = 0; i < 50; i++) {
- SinglePointInformation spi = SinglePointInformation_create(NULL, 110, false, IEC60870_QUALITY_GOOD);;
- CS101_ASDU_addInformationObject(newAsdu, (InformationObject) spi);
- InformationObject_destroy((InformationObject) spi);
- }
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- int count2 = CS104_Slave_getNumberOfQueueEntries(slave, NULL);
- /* check that multiple buffer entries were removed */
- TEST_ASSERT_TRUE(count2 + 1 < count1);
- info.asduHandlerCalled = 0;
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- Thread_sleep(500);
- CS104_Connection_close(con);
- TEST_ASSERT_EQUAL_INT(count2, info.asduHandlerCalled);
- CS104_Connection_destroy(con);
- CS104_Slave_destroy(slave);
- }
- void
- test_IpAddressHandling(void)
- {
- struct sCS104_IPAddress ipAddr1;
- CS104_IPAddress_setFromString(&ipAddr1, "192.168.34.25");
- TEST_ASSERT_EQUAL_INT(IP_ADDRESS_TYPE_IPV4, ipAddr1.type);
- TEST_ASSERT_EQUAL_UINT8(192, ipAddr1.address[0]);
- TEST_ASSERT_EQUAL_UINT8(168, ipAddr1.address[1]);
- TEST_ASSERT_EQUAL_UINT8(34, ipAddr1.address[2]);
- TEST_ASSERT_EQUAL_UINT8(25, ipAddr1.address[3]);
- CS104_IPAddress_setFromString(&ipAddr1, "1:22:333:aaaa:b:c:d:e");
- TEST_ASSERT_EQUAL_INT(IP_ADDRESS_TYPE_IPV6, ipAddr1.type);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[0]);
- TEST_ASSERT_EQUAL_UINT8(0x01, ipAddr1.address[1]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[2]);
- TEST_ASSERT_EQUAL_UINT8(0x22, ipAddr1.address[3]);
- TEST_ASSERT_EQUAL_UINT8(0x03, ipAddr1.address[4]);
- TEST_ASSERT_EQUAL_UINT8(0x33, ipAddr1.address[5]);
- TEST_ASSERT_EQUAL_UINT8(0xaa, ipAddr1.address[6]);
- TEST_ASSERT_EQUAL_UINT8(0xaa, ipAddr1.address[7]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[8]);
- TEST_ASSERT_EQUAL_UINT8(0x0b, ipAddr1.address[9]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[10]);
- TEST_ASSERT_EQUAL_UINT8(0x0c, ipAddr1.address[11]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[12]);
- TEST_ASSERT_EQUAL_UINT8(0x0d, ipAddr1.address[13]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[14]);
- TEST_ASSERT_EQUAL_UINT8(0x0e, ipAddr1.address[15]);
- CS104_IPAddress_setFromString(&ipAddr1, "::2001:db8");
- TEST_ASSERT_EQUAL_INT(IP_ADDRESS_TYPE_IPV6, ipAddr1.type);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[0]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[1]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[2]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[3]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[4]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[5]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[6]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[7]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[8]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[9]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[10]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[11]);
- TEST_ASSERT_EQUAL_UINT8(0x20, ipAddr1.address[12]);
- TEST_ASSERT_EQUAL_UINT8(0x01, ipAddr1.address[13]);
- TEST_ASSERT_EQUAL_UINT8(0x0d, ipAddr1.address[14]);
- TEST_ASSERT_EQUAL_UINT8(0xb8, ipAddr1.address[15]);
- CS104_IPAddress_setFromString(&ipAddr1, "fe80::70d2:6cba:a994:2ced");
- TEST_ASSERT_EQUAL_INT(IP_ADDRESS_TYPE_IPV6, ipAddr1.type);
- TEST_ASSERT_EQUAL_UINT8(0xfe, ipAddr1.address[0]);
- TEST_ASSERT_EQUAL_UINT8(0x80, ipAddr1.address[1]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[2]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[3]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[4]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[5]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[6]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[7]);
- TEST_ASSERT_EQUAL_UINT8(0x70, ipAddr1.address[8]);
- TEST_ASSERT_EQUAL_UINT8(0xd2, ipAddr1.address[9]);
- TEST_ASSERT_EQUAL_UINT8(0x6c, ipAddr1.address[10]);
- TEST_ASSERT_EQUAL_UINT8(0xba, ipAddr1.address[11]);
- TEST_ASSERT_EQUAL_UINT8(0xa9, ipAddr1.address[12]);
- TEST_ASSERT_EQUAL_UINT8(0x94, ipAddr1.address[13]);
- TEST_ASSERT_EQUAL_UINT8(0x2c, ipAddr1.address[14]);
- TEST_ASSERT_EQUAL_UINT8(0xed, ipAddr1.address[15]);
- CS104_IPAddress_setFromString(&ipAddr1, "2001:db8:1::ab9:C0A8:102");
- TEST_ASSERT_EQUAL_INT(IP_ADDRESS_TYPE_IPV6, ipAddr1.type);
- TEST_ASSERT_EQUAL_UINT8(0x20, ipAddr1.address[0]);
- TEST_ASSERT_EQUAL_UINT8(0x01, ipAddr1.address[1]);
- TEST_ASSERT_EQUAL_UINT8(0x0d, ipAddr1.address[2]);
- TEST_ASSERT_EQUAL_UINT8(0xb8, ipAddr1.address[3]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[4]);
- TEST_ASSERT_EQUAL_UINT8(0x01, ipAddr1.address[5]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[6]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[7]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[8]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[9]);
- TEST_ASSERT_EQUAL_UINT8(0x0a, ipAddr1.address[10]);
- TEST_ASSERT_EQUAL_UINT8(0xb9, ipAddr1.address[11]);
- TEST_ASSERT_EQUAL_UINT8(0xc0, ipAddr1.address[12]);
- TEST_ASSERT_EQUAL_UINT8(0xa8, ipAddr1.address[13]);
- TEST_ASSERT_EQUAL_UINT8(0x01, ipAddr1.address[14]);
- TEST_ASSERT_EQUAL_UINT8(0x02, ipAddr1.address[15]);
- CS104_IPAddress_setFromString(&ipAddr1, "::1");
- TEST_ASSERT_EQUAL_INT(IP_ADDRESS_TYPE_IPV6, ipAddr1.type);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[0]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[1]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[2]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[3]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[4]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[5]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[6]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[7]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[8]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[9]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[10]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[11]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[12]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[13]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[14]);
- TEST_ASSERT_EQUAL_UINT8(0x01, ipAddr1.address[15]);
- CS104_IPAddress_setFromString(&ipAddr1, "::1");
- TEST_ASSERT_EQUAL_INT(IP_ADDRESS_TYPE_IPV6, ipAddr1.type);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[0]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[1]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[2]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[3]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[4]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[5]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[6]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[7]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[8]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[9]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[10]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[11]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[12]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[13]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[14]);
- TEST_ASSERT_EQUAL_UINT8(0x01, ipAddr1.address[15]);
- CS104_IPAddress_setFromString(&ipAddr1, "::");
- TEST_ASSERT_EQUAL_INT(IP_ADDRESS_TYPE_IPV6, ipAddr1.type);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[0]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[1]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[2]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[3]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[4]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[5]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[6]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[7]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[8]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[9]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[10]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[11]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[12]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[13]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[14]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[15]);
- CS104_IPAddress_setFromString(&ipAddr1, "fe80:2001::");
- TEST_ASSERT_EQUAL_INT(IP_ADDRESS_TYPE_IPV6, ipAddr1.type);
- TEST_ASSERT_EQUAL_UINT8(0xfe, ipAddr1.address[0]);
- TEST_ASSERT_EQUAL_UINT8(0x80, ipAddr1.address[1]);
- TEST_ASSERT_EQUAL_UINT8(0x20, ipAddr1.address[2]);
- TEST_ASSERT_EQUAL_UINT8(0x01, ipAddr1.address[3]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[4]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[5]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[6]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[7]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[8]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[9]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[10]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[11]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[12]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[13]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[14]);
- TEST_ASSERT_EQUAL_UINT8(0x00, ipAddr1.address[15]);
- }
- void
- test_DoublePointInformation(void)
- {
- DoublePointInformation dpi1;
- DoublePointInformation dpi2;
- DoublePointInformation dpi3;
- dpi1 = DoublePointInformation_create(NULL, 101, IEC60870_DOUBLE_POINT_OFF, IEC60870_QUALITY_INVALID);
- dpi2 = DoublePointInformation_create(NULL, 102, IEC60870_DOUBLE_POINT_ON, IEC60870_QUALITY_BLOCKED);
- dpi3 = DoublePointInformation_create(NULL, 103, IEC60870_DOUBLE_POINT_INDETERMINATE, IEC60870_QUALITY_GOOD);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_DOUBLE_POINT_OFF, DoublePointInformation_getValue(dpi1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_DOUBLE_POINT_ON, DoublePointInformation_getValue(dpi2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_DOUBLE_POINT_INDETERMINATE, DoublePointInformation_getValue(dpi3));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dpi1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dpi2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dpi3);
- InformationObject_destroy((InformationObject) dpi1);
- InformationObject_destroy((InformationObject) dpi2);
- InformationObject_destroy((InformationObject) dpi3);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(18, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(3, CS101_ASDU_getNumberOfElements(asdu2));
- DoublePointInformation dpi1_dec = (DoublePointInformation) CS101_ASDU_getElement(asdu2, 0);
- DoublePointInformation dpi2_dec = (DoublePointInformation) CS101_ASDU_getElement(asdu2, 1);
- DoublePointInformation dpi3_dec = (DoublePointInformation) CS101_ASDU_getElement(asdu2, 2);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )dpi1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )dpi2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject )dpi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, DoublePointInformation_getQuality(dpi1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_DOUBLE_POINT_OFF, DoublePointInformation_getValue(dpi1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, DoublePointInformation_getQuality(dpi2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_DOUBLE_POINT_ON, DoublePointInformation_getValue(dpi2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, DoublePointInformation_getQuality(dpi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_DOUBLE_POINT_INDETERMINATE, DoublePointInformation_getValue(dpi3_dec));
- InformationObject_destroy((InformationObject) dpi1_dec);
- InformationObject_destroy((InformationObject) dpi2_dec);
- InformationObject_destroy((InformationObject) dpi3_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SinglePointInformation(void)
- {
- SinglePointInformation spi1;
- SinglePointInformation spi2;
- SinglePointInformation spi3;
- SinglePointInformation spi4;
- spi1 = SinglePointInformation_create(NULL, 101, true, IEC60870_QUALITY_INVALID);
- spi2 = SinglePointInformation_create(NULL, 102, false, IEC60870_QUALITY_BLOCKED);
- spi3 = SinglePointInformation_create(NULL, 103, true, IEC60870_QUALITY_GOOD);
- /* invalid quality bit (overflow) is expected to be ignored */
- spi4 = SinglePointInformation_create(NULL, 104, false, IEC60870_QUALITY_OVERFLOW);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, SinglePointInformation_getQuality(spi1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, SinglePointInformation_getQuality(spi2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, SinglePointInformation_getQuality(spi3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, SinglePointInformation_getQuality(spi4));
- TEST_ASSERT_TRUE(SinglePointInformation_getValue(spi1));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi4);
- SinglePointInformation_destroy(spi1);
- SinglePointInformation_destroy(spi2);
- SinglePointInformation_destroy(spi3);
- SinglePointInformation_destroy(spi4);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(22, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(4, CS101_ASDU_getNumberOfElements(asdu2));
- SinglePointInformation spi1_dec = (SinglePointInformation) CS101_ASDU_getElement(asdu2, 0);
- SinglePointInformation spi2_dec = (SinglePointInformation) CS101_ASDU_getElement(asdu2, 1);
- SinglePointInformation spi3_dec = (SinglePointInformation) CS101_ASDU_getElement(asdu2, 2);
- SinglePointInformation spi4_dec = (SinglePointInformation) CS101_ASDU_getElement(asdu2, 3);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject)spi1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject)spi2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject)spi3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject)spi4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, SinglePointInformation_getQuality(spi1_dec));
- TEST_ASSERT_TRUE(SinglePointInformation_getValue(spi1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, SinglePointInformation_getQuality(spi2_dec));
- TEST_ASSERT_FALSE(SinglePointInformation_getValue(spi2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, SinglePointInformation_getQuality(spi3_dec));
- TEST_ASSERT_TRUE(SinglePointInformation_getValue(spi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, SinglePointInformation_getQuality(spi4_dec));
- TEST_ASSERT_FALSE(SinglePointInformation_getValue(spi4_dec));
- SinglePointInformation_destroy(spi1_dec);
- SinglePointInformation_destroy(spi2_dec);
- SinglePointInformation_destroy(spi3_dec);
- SinglePointInformation_destroy(spi4_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_DoublePointWithCP24Time2a(void)
- {
- DoublePointWithCP24Time2a dpi1;
- DoublePointWithCP24Time2a dpi2;
- DoublePointWithCP24Time2a dpi3;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- struct sCP24Time2a cpTime1;
- struct sCP24Time2a cpTime2;
- struct sCP24Time2a cpTime3;
- bzero(&cpTime1, sizeof(struct sCP24Time2a));
- bzero(&cpTime2, sizeof(struct sCP24Time2a));
- bzero(&cpTime3, sizeof(struct sCP24Time2a));
- CP24Time2a_setMinute(&cpTime1, 12);
- CP24Time2a_setMillisecond(&cpTime1, 24123);
- CP24Time2a_setMinute(&cpTime2, 54);
- CP24Time2a_setMillisecond(&cpTime2, 12345);
- CP24Time2a_setMinute(&cpTime3, 00);
- CP24Time2a_setMillisecond(&cpTime3, 00001);
- dpi1 = DoublePointWithCP24Time2a_create(NULL, 101, IEC60870_DOUBLE_POINT_OFF, IEC60870_QUALITY_INVALID, &cpTime1);
- dpi2 = DoublePointWithCP24Time2a_create(NULL, 102, IEC60870_DOUBLE_POINT_ON, IEC60870_QUALITY_BLOCKED, &cpTime2);
- dpi3 = DoublePointWithCP24Time2a_create(NULL, 103, IEC60870_DOUBLE_POINT_INDETERMINATE, IEC60870_QUALITY_GOOD, &cpTime3);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, DoublePointInformation_getQuality((DoublePointInformation )dpi1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, DoublePointInformation_getQuality((DoublePointInformation )dpi2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, DoublePointInformation_getQuality((DoublePointInformation )dpi3));
- TEST_ASSERT_TRUE(DoublePointInformation_getQuality((DoublePointInformation )dpi1));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dpi1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dpi2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dpi3);
- InformationObject_destroy((InformationObject) dpi1);
- InformationObject_destroy((InformationObject) dpi2);
- InformationObject_destroy((InformationObject) dpi3);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(27, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(3, CS101_ASDU_getNumberOfElements(asdu2));
- DoublePointWithCP24Time2a dpi1_dec = (DoublePointWithCP24Time2a) CS101_ASDU_getElement(asdu2, 0);
- DoublePointWithCP24Time2a dpi2_dec = (DoublePointWithCP24Time2a) CS101_ASDU_getElement(asdu2, 1);
- DoublePointWithCP24Time2a dpi3_dec = (DoublePointWithCP24Time2a) CS101_ASDU_getElement(asdu2, 2);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )dpi1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )dpi2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject )dpi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, DoublePointInformation_getQuality((DoublePointInformation )dpi1_dec));
- TEST_ASSERT_TRUE(DoublePointInformation_getQuality((DoublePointInformation )dpi1_dec));
- CP24Time2a time1_dec = DoublePointWithCP24Time2a_getTimestamp(dpi1_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time1_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time1_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, DoublePointInformation_getQuality((DoublePointInformation )dpi2_dec));
- TEST_ASSERT_TRUE(DoublePointInformation_getQuality((DoublePointInformation )dpi2_dec));
- CP24Time2a time2_dec = DoublePointWithCP24Time2a_getTimestamp(dpi2_dec);
- TEST_ASSERT_EQUAL_INT(54, CP24Time2a_getMinute(time2_dec));
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getSecond(time2_dec));
- TEST_ASSERT_EQUAL_INT(345, CP24Time2a_getMillisecond(time2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, DoublePointInformation_getQuality((DoublePointInformation )dpi3_dec));
- TEST_ASSERT_TRUE(DoublePointInformation_getValue((DoublePointInformation )dpi3_dec));
- CP24Time2a time3_dec = DoublePointWithCP24Time2a_getTimestamp(dpi3_dec);
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getMinute(time3_dec));
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getSecond(time3_dec));
- TEST_ASSERT_EQUAL_INT(1, CP24Time2a_getMillisecond(time3_dec));
- InformationObject_destroy((InformationObject) dpi1_dec);
- InformationObject_destroy((InformationObject) dpi2_dec);
- InformationObject_destroy((InformationObject) dpi3_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SinglePointWithCP24Time2a(void)
- {
- SinglePointWithCP24Time2a spi1;
- SinglePointWithCP24Time2a spi2;
- SinglePointWithCP24Time2a spi3;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- struct sCP24Time2a cpTime1;
- struct sCP24Time2a cpTime2;
- struct sCP24Time2a cpTime3;
- bzero(&cpTime1, sizeof(struct sCP24Time2a));
- bzero(&cpTime2, sizeof(struct sCP24Time2a));
- bzero(&cpTime3, sizeof(struct sCP24Time2a));
- CP24Time2a_setMinute(&cpTime1, 12);
- CP24Time2a_setMillisecond(&cpTime1, 24123);
- CP24Time2a_setMinute(&cpTime2, 54);
- CP24Time2a_setMillisecond(&cpTime2, 12345);
- CP24Time2a_setMinute(&cpTime3, 00);
- CP24Time2a_setMillisecond(&cpTime3, 00001);
- spi1 = SinglePointWithCP24Time2a_create(NULL, 101, true, IEC60870_QUALITY_INVALID, &cpTime1);
- spi2 = SinglePointWithCP24Time2a_create(NULL, 102, false, IEC60870_QUALITY_BLOCKED, &cpTime2);
- spi3 = SinglePointWithCP24Time2a_create(NULL, 103, true, IEC60870_QUALITY_GOOD, &cpTime3);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, SinglePointInformation_getQuality((SinglePointInformation)spi1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, SinglePointInformation_getQuality((SinglePointInformation)spi2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, SinglePointInformation_getQuality((SinglePointInformation)spi3));
- TEST_ASSERT_TRUE(SinglePointInformation_getValue((SinglePointInformation)spi1));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi3);
- InformationObject_destroy((InformationObject) spi1);
- InformationObject_destroy((InformationObject) spi2);
- InformationObject_destroy((InformationObject) spi3);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(27, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(3, CS101_ASDU_getNumberOfElements(asdu2));
- SinglePointWithCP24Time2a spi1_dec = (SinglePointWithCP24Time2a) CS101_ASDU_getElement(asdu2, 0);
- SinglePointWithCP24Time2a spi2_dec = (SinglePointWithCP24Time2a) CS101_ASDU_getElement(asdu2, 1);
- SinglePointWithCP24Time2a spi3_dec = (SinglePointWithCP24Time2a) CS101_ASDU_getElement(asdu2, 2);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject)spi1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject)spi2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject)spi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, SinglePointInformation_getQuality((SinglePointInformation)spi1_dec));
- TEST_ASSERT_TRUE(SinglePointInformation_getValue((SinglePointInformation)spi1_dec));
- CP24Time2a time1_dec = SinglePointWithCP24Time2a_getTimestamp(spi1_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time1_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time1_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, SinglePointInformation_getQuality((SinglePointInformation)spi2_dec));
- TEST_ASSERT_FALSE(SinglePointInformation_getValue((SinglePointInformation)spi2_dec));
- CP24Time2a time2_dec = SinglePointWithCP24Time2a_getTimestamp(spi2_dec);
- TEST_ASSERT_EQUAL_INT(54, CP24Time2a_getMinute(time2_dec));
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getSecond(time2_dec));
- TEST_ASSERT_EQUAL_INT(345, CP24Time2a_getMillisecond(time2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, SinglePointInformation_getQuality((SinglePointInformation)spi3_dec));
- TEST_ASSERT_TRUE(SinglePointInformation_getValue((SinglePointInformation)spi3_dec));
- CP24Time2a time3_dec = SinglePointWithCP24Time2a_getTimestamp(spi3_dec);
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getMinute(time3_dec));
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getSecond(time3_dec));
- TEST_ASSERT_EQUAL_INT(1, CP24Time2a_getMillisecond(time3_dec));
- InformationObject_destroy((InformationObject) spi1_dec);
- InformationObject_destroy((InformationObject) spi2_dec);
- InformationObject_destroy((InformationObject) spi3_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_DoublePointWithCP56Time2a(void)
- {
- DoublePointWithCP56Time2a dpi1;
- DoublePointWithCP56Time2a dpi2;
- DoublePointWithCP56Time2a dpi3;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- struct sCP56Time2a cpTime1;
- struct sCP56Time2a cpTime2;
- struct sCP56Time2a cpTime3;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- CP56Time2a_createFromMsTimestamp(&cpTime2, time2);
- CP56Time2a_createFromMsTimestamp(&cpTime3, time3);
- dpi1 = DoublePointWithCP56Time2a_create(NULL, 101, IEC60870_DOUBLE_POINT_OFF, IEC60870_QUALITY_INVALID, &cpTime1);
- dpi2 = DoublePointWithCP56Time2a_create(NULL, 102, IEC60870_DOUBLE_POINT_ON, IEC60870_QUALITY_BLOCKED, &cpTime2);
- dpi3 = DoublePointWithCP56Time2a_create(NULL, 103, IEC60870_DOUBLE_POINT_INDETERMINATE, IEC60870_QUALITY_GOOD, &cpTime3);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, DoublePointInformation_getQuality((DoublePointInformation)dpi1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, DoublePointInformation_getQuality((DoublePointInformation)dpi2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, DoublePointInformation_getQuality((DoublePointInformation)dpi3));
- TEST_ASSERT_TRUE(DoublePointInformation_getValue((DoublePointInformation)dpi1));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dpi1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dpi2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dpi3);
- InformationObject_destroy((InformationObject) dpi1);
- InformationObject_destroy((InformationObject) dpi2);
- InformationObject_destroy((InformationObject) dpi3);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(39, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(3, CS101_ASDU_getNumberOfElements(asdu2));
- DoublePointWithCP56Time2a dpi1_dec = (DoublePointWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- DoublePointWithCP56Time2a dpi2_dec = (DoublePointWithCP56Time2a) CS101_ASDU_getElement(asdu2, 1);
- DoublePointWithCP56Time2a dpi3_dec = (DoublePointWithCP56Time2a) CS101_ASDU_getElement(asdu2, 2);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject)dpi1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject)dpi2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject)dpi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, DoublePointInformation_getQuality((DoublePointInformation)dpi1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_DOUBLE_POINT_OFF, DoublePointInformation_getValue((DoublePointInformation)dpi1_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(DoublePointWithCP56Time2a_getTimestamp(dpi1_dec)));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, DoublePointInformation_getQuality((DoublePointInformation)dpi2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_DOUBLE_POINT_ON, DoublePointInformation_getValue((DoublePointInformation)dpi2_dec));
- TEST_ASSERT_EQUAL_UINT64(time2, CP56Time2a_toMsTimestamp(DoublePointWithCP56Time2a_getTimestamp(dpi2_dec)));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, DoublePointInformation_getQuality((DoublePointInformation)dpi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_DOUBLE_POINT_INDETERMINATE, DoublePointInformation_getValue((DoublePointInformation)dpi3_dec));
- TEST_ASSERT_EQUAL_UINT64(time3, CP56Time2a_toMsTimestamp(DoublePointWithCP56Time2a_getTimestamp(dpi3_dec)));
- InformationObject_destroy((InformationObject) dpi1_dec);
- InformationObject_destroy((InformationObject) dpi2_dec);
- InformationObject_destroy((InformationObject) dpi3_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SinglePointWithCP56Time2a(void)
- {
- SinglePointWithCP56Time2a spi1;
- SinglePointWithCP56Time2a spi2;
- SinglePointWithCP56Time2a spi3;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- struct sCP56Time2a cpTime1;
- struct sCP56Time2a cpTime2;
- struct sCP56Time2a cpTime3;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- CP56Time2a_createFromMsTimestamp(&cpTime2, time2);
- CP56Time2a_createFromMsTimestamp(&cpTime3, time3);
- spi1 = SinglePointWithCP56Time2a_create(NULL, 101, true, IEC60870_QUALITY_INVALID, &cpTime1);
- spi2 = SinglePointWithCP56Time2a_create(NULL, 102, false, IEC60870_QUALITY_BLOCKED, &cpTime2);
- spi3 = SinglePointWithCP56Time2a_create(NULL, 103, true, IEC60870_QUALITY_GOOD, &cpTime3);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, SinglePointInformation_getQuality((SinglePointInformation)spi1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, SinglePointInformation_getQuality((SinglePointInformation)spi2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, SinglePointInformation_getQuality((SinglePointInformation)spi3));
- TEST_ASSERT_TRUE(SinglePointInformation_getValue((SinglePointInformation)spi1));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spi3);
- InformationObject_destroy((InformationObject) spi1);
- InformationObject_destroy((InformationObject) spi2);
- InformationObject_destroy((InformationObject) spi3);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(39, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(3, CS101_ASDU_getNumberOfElements(asdu2));
- SinglePointWithCP56Time2a spi1_dec = (SinglePointWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- SinglePointWithCP56Time2a spi2_dec = (SinglePointWithCP56Time2a) CS101_ASDU_getElement(asdu2, 1);
- SinglePointWithCP56Time2a spi3_dec = (SinglePointWithCP56Time2a) CS101_ASDU_getElement(asdu2, 2);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject)spi1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject)spi2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject)spi3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, SinglePointInformation_getQuality((SinglePointInformation)spi1_dec));
- TEST_ASSERT_TRUE(SinglePointInformation_getValue((SinglePointInformation)spi1_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(SinglePointWithCP56Time2a_getTimestamp(spi1_dec)));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, SinglePointInformation_getQuality((SinglePointInformation)spi2_dec));
- TEST_ASSERT_FALSE(SinglePointInformation_getValue((SinglePointInformation)spi2_dec));
- TEST_ASSERT_EQUAL_UINT64(time2, CP56Time2a_toMsTimestamp(SinglePointWithCP56Time2a_getTimestamp(spi2_dec)));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, SinglePointInformation_getQuality((SinglePointInformation)spi3_dec));
- TEST_ASSERT_TRUE(SinglePointInformation_getValue((SinglePointInformation)spi3_dec));
- TEST_ASSERT_EQUAL_UINT64(time3, CP56Time2a_toMsTimestamp(SinglePointWithCP56Time2a_getTimestamp(spi3_dec)));
- InformationObject_destroy((InformationObject) spi1_dec);
- InformationObject_destroy((InformationObject) spi2_dec);
- InformationObject_destroy((InformationObject) spi3_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_NormalizeMeasureValueWithoutQuality(void)
- {
- MeasuredValueNormalizedWithoutQuality nmv1;
- nmv1 = MeasuredValueNormalizedWithoutQuality_create(NULL, 101, 0.5f);
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.5f, MeasuredValueNormalizedWithoutQuality_getValue((MeasuredValueNormalizedWithoutQuality )nmv1));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv1);
- MeasuredValueNormalizedWithoutQuality_destroy(nmv1);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(11, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueNormalizedWithoutQuality nmv1_dec = (MeasuredValueNormalizedWithoutQuality) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )nmv1_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.5f, MeasuredValueNormalizedWithoutQuality_getValue((MeasuredValueNormalizedWithoutQuality )nmv1_dec));
- MeasuredValueNormalizedWithoutQuality_destroy(nmv1_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_NormalizeMeasureValue(void)
- {
- MeasuredValueNormalized nmv1;
- MeasuredValueNormalized nmv2;
- MeasuredValueNormalized nmv3;
- MeasuredValueNormalized nmv4;
- MeasuredValueNormalized nmv5;
- MeasuredValueNormalized nmv6;
- MeasuredValueNormalized nmv7;
- MeasuredValueNormalized nmv8;
- nmv1 = MeasuredValueNormalized_create(NULL, 101, -0.5f, IEC60870_QUALITY_GOOD);
- nmv2 = MeasuredValueNormalized_create(NULL, 102, -0.2f, IEC60870_QUALITY_OVERFLOW);
- nmv3 = MeasuredValueNormalized_create(NULL, 103, -0.1f, IEC60870_QUALITY_RESERVED);
- nmv4 = MeasuredValueNormalized_create(NULL, 104, 0, IEC60870_QUALITY_ELAPSED_TIME_INVALID);
- nmv5 = MeasuredValueNormalized_create(NULL, 105, 0.2f, IEC60870_QUALITY_BLOCKED);
- nmv6 = MeasuredValueNormalized_create(NULL, 106, 0.3f, IEC60870_QUALITY_SUBSTITUTED);
- nmv7 = MeasuredValueNormalized_create(NULL, 107, 0.4f, IEC60870_QUALITY_NON_TOPICAL);
- nmv8 = MeasuredValueNormalized_create(NULL, 108, 0.5f, IEC60870_QUALITY_INVALID);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv8));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv1));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv2));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.1f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv3));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv4));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv5));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.3f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv6));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.4f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv7));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv8);
- MeasuredValueNormalized_destroy(nmv1);
- MeasuredValueNormalized_destroy(nmv2);
- MeasuredValueNormalized_destroy(nmv3);
- MeasuredValueNormalized_destroy(nmv4);
- MeasuredValueNormalized_destroy(nmv5);
- MeasuredValueNormalized_destroy(nmv6);
- MeasuredValueNormalized_destroy(nmv7);
- MeasuredValueNormalized_destroy(nmv8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(54, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueNormalized nmv1_dec = (MeasuredValueNormalized) CS101_ASDU_getElement(asdu2, 0);
- MeasuredValueNormalized nmv2_dec = (MeasuredValueNormalized) CS101_ASDU_getElement(asdu2, 1);
- MeasuredValueNormalized nmv3_dec = (MeasuredValueNormalized) CS101_ASDU_getElement(asdu2, 2);
- MeasuredValueNormalized nmv4_dec = (MeasuredValueNormalized) CS101_ASDU_getElement(asdu2, 3);
- MeasuredValueNormalized nmv5_dec = (MeasuredValueNormalized) CS101_ASDU_getElement(asdu2, 4);
- MeasuredValueNormalized nmv6_dec = (MeasuredValueNormalized) CS101_ASDU_getElement(asdu2, 5);
- MeasuredValueNormalized nmv7_dec = (MeasuredValueNormalized) CS101_ASDU_getElement(asdu2, 6);
- MeasuredValueNormalized nmv8_dec = (MeasuredValueNormalized) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )nmv1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )nmv2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject )nmv3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject )nmv4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject )nmv5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject )nmv6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject )nmv7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject )nmv8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv8_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv1_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv2_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.1f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv3_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv4_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv5_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.3f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv6_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.4f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv7_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv8_dec));
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )nmv1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )nmv2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject )nmv3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject )nmv4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject )nmv5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject )nmv6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject )nmv7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject )nmv8_dec));
- MeasuredValueNormalized_destroy(nmv1_dec);
- MeasuredValueNormalized_destroy(nmv2_dec);
- MeasuredValueNormalized_destroy(nmv3_dec);
- MeasuredValueNormalized_destroy(nmv4_dec);
- MeasuredValueNormalized_destroy(nmv5_dec);
- MeasuredValueNormalized_destroy(nmv6_dec);
- MeasuredValueNormalized_destroy(nmv7_dec);
- MeasuredValueNormalized_destroy(nmv8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_MeasuredValueNormalizedWithCP24Time2a(void)
- {
- MeasuredValueNormalizedWithCP24Time2a nmv1;
- MeasuredValueNormalizedWithCP24Time2a nmv2;
- MeasuredValueNormalizedWithCP24Time2a nmv3;
- MeasuredValueNormalizedWithCP24Time2a nmv4;
- MeasuredValueNormalizedWithCP24Time2a nmv5;
- MeasuredValueNormalizedWithCP24Time2a nmv6;
- MeasuredValueNormalizedWithCP24Time2a nmv7;
- MeasuredValueNormalizedWithCP24Time2a nmv8;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- uint64_t time4 = time3 + 1000;
- uint64_t time5 = time4 + 1000;
- uint64_t time6 = time5 + 1000;
- uint64_t time7 = time6 + 1000;
- uint64_t time8 = time7 + 1000;
- struct sCP24Time2a cpTime1;
- struct sCP24Time2a cpTime2;
- struct sCP24Time2a cpTime3;
- struct sCP24Time2a cpTime4;
- struct sCP24Time2a cpTime5;
- struct sCP24Time2a cpTime6;
- struct sCP24Time2a cpTime7;
- struct sCP24Time2a cpTime8;
- bzero(&cpTime1, sizeof(struct sCP24Time2a));
- bzero(&cpTime2, sizeof(struct sCP24Time2a));
- bzero(&cpTime3, sizeof(struct sCP24Time2a));
- bzero(&cpTime4, sizeof(struct sCP24Time2a));
- bzero(&cpTime5, sizeof(struct sCP24Time2a));
- bzero(&cpTime6, sizeof(struct sCP24Time2a));
- bzero(&cpTime7, sizeof(struct sCP24Time2a));
- bzero(&cpTime8, sizeof(struct sCP24Time2a));
- CP24Time2a_setMinute(&cpTime1, 12);
- CP24Time2a_setMillisecond(&cpTime1, 24123);
- CP24Time2a_setMinute(&cpTime2, 54);
- CP24Time2a_setMillisecond(&cpTime2, 12345);
- CP24Time2a_setMinute(&cpTime3, 00);
- CP24Time2a_setMillisecond(&cpTime3, 00001);
- CP24Time2a_setMinute(&cpTime4, 12);
- CP24Time2a_setMillisecond(&cpTime4, 24123);
- CP24Time2a_setMinute(&cpTime5, 12);
- CP24Time2a_setMillisecond(&cpTime5, 24123);
- CP24Time2a_setMinute(&cpTime6, 12);
- CP24Time2a_setMillisecond(&cpTime6, 24123);
- CP24Time2a_setMinute(&cpTime7, 12);
- CP24Time2a_setMillisecond(&cpTime7, 24123);
- CP24Time2a_setMinute(&cpTime8, 12);
- CP24Time2a_setMillisecond(&cpTime8, 24123);
- nmv1 = MeasuredValueNormalizedWithCP24Time2a_create(NULL, 101, -0.5f, IEC60870_QUALITY_GOOD, &cpTime1);
- nmv2 = MeasuredValueNormalizedWithCP24Time2a_create(NULL, 102, -0.2f, IEC60870_QUALITY_OVERFLOW, &cpTime2);
- nmv3 = MeasuredValueNormalizedWithCP24Time2a_create(NULL, 103, -0.1f, IEC60870_QUALITY_RESERVED, &cpTime3);
- nmv4 = MeasuredValueNormalizedWithCP24Time2a_create(NULL, 104, 0, IEC60870_QUALITY_ELAPSED_TIME_INVALID, &cpTime4);
- nmv5 = MeasuredValueNormalizedWithCP24Time2a_create(NULL, 105, 0.2f, IEC60870_QUALITY_BLOCKED, &cpTime5);
- nmv6 = MeasuredValueNormalizedWithCP24Time2a_create(NULL, 106, 0.3f, IEC60870_QUALITY_SUBSTITUTED, &cpTime6);
- nmv7 = MeasuredValueNormalizedWithCP24Time2a_create(NULL, 107, 0.4f, IEC60870_QUALITY_NON_TOPICAL, &cpTime7);
- nmv8 = MeasuredValueNormalizedWithCP24Time2a_create(NULL, 108, 0.5f, IEC60870_QUALITY_INVALID, &cpTime8);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv8));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv1));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv2));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.1f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv3));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv4));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv5));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.3f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv6));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.4f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv7));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv8);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv1);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv2);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv3);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv4);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv5);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv6);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv7);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(78, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueNormalizedWithCP24Time2a nmv1_dec = (MeasuredValueNormalizedWithCP24Time2a) CS101_ASDU_getElement(asdu2, 0);
- MeasuredValueNormalizedWithCP24Time2a nmv2_dec = (MeasuredValueNormalizedWithCP24Time2a) CS101_ASDU_getElement(asdu2, 1);
- MeasuredValueNormalizedWithCP24Time2a nmv3_dec = (MeasuredValueNormalizedWithCP24Time2a) CS101_ASDU_getElement(asdu2, 2);
- MeasuredValueNormalizedWithCP24Time2a nmv4_dec = (MeasuredValueNormalizedWithCP24Time2a) CS101_ASDU_getElement(asdu2, 3);
- MeasuredValueNormalizedWithCP24Time2a nmv5_dec = (MeasuredValueNormalizedWithCP24Time2a) CS101_ASDU_getElement(asdu2, 4);
- MeasuredValueNormalizedWithCP24Time2a nmv6_dec = (MeasuredValueNormalizedWithCP24Time2a) CS101_ASDU_getElement(asdu2, 5);
- MeasuredValueNormalizedWithCP24Time2a nmv7_dec = (MeasuredValueNormalizedWithCP24Time2a) CS101_ASDU_getElement(asdu2, 6);
- MeasuredValueNormalizedWithCP24Time2a nmv8_dec = (MeasuredValueNormalizedWithCP24Time2a) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )nmv1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )nmv2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject )nmv3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject )nmv4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject )nmv5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject )nmv6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject )nmv7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject )nmv8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv8_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv1_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv2_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.1f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv3_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv4_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv5_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.3f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv6_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.4f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv7_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv8_dec));
- CP24Time2a time1_dec = MeasuredValueNormalizedWithCP24Time2a_getTimestamp(nmv1_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time1_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time1_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time1_dec));
- CP24Time2a time2_dec = MeasuredValueNormalizedWithCP24Time2a_getTimestamp(nmv2_dec);
- TEST_ASSERT_EQUAL_INT(54, CP24Time2a_getMinute(time2_dec));
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getSecond(time2_dec));
- TEST_ASSERT_EQUAL_INT(345, CP24Time2a_getMillisecond(time2_dec));
- CP24Time2a time3_dec = MeasuredValueNormalizedWithCP24Time2a_getTimestamp(nmv3_dec);
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getMinute(time3_dec));
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getSecond(time3_dec));
- TEST_ASSERT_EQUAL_INT(1, CP24Time2a_getMillisecond(time3_dec));
- CP24Time2a time4_dec = MeasuredValueNormalizedWithCP24Time2a_getTimestamp(nmv4_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time4_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time4_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time4_dec));
- CP24Time2a time5_dec = MeasuredValueNormalizedWithCP24Time2a_getTimestamp(nmv5_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time5_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time5_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time5_dec));
- CP24Time2a time6_dec = MeasuredValueNormalizedWithCP24Time2a_getTimestamp(nmv6_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time6_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time6_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time6_dec));
- CP24Time2a time7_dec = MeasuredValueNormalizedWithCP24Time2a_getTimestamp(nmv7_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time7_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time7_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time7_dec));
- CP24Time2a time8_dec = MeasuredValueNormalizedWithCP24Time2a_getTimestamp(nmv8_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time8_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time8_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time8_dec));
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv1_dec);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv2_dec);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv3_dec);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv4_dec);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv5_dec);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv6_dec);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv7_dec);
- MeasuredValueNormalizedWithCP24Time2a_destroy(nmv8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_MeasuredValueNormalizedWithCP56Time2a(void)
- {
- MeasuredValueNormalizedWithCP56Time2a nmv1;
- MeasuredValueNormalizedWithCP56Time2a nmv2;
- MeasuredValueNormalizedWithCP56Time2a nmv3;
- MeasuredValueNormalizedWithCP56Time2a nmv4;
- MeasuredValueNormalizedWithCP56Time2a nmv5;
- MeasuredValueNormalizedWithCP56Time2a nmv6;
- MeasuredValueNormalizedWithCP56Time2a nmv7;
- MeasuredValueNormalizedWithCP56Time2a nmv8;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- uint64_t time4 = time3 + 1000;
- uint64_t time5 = time4 + 1000;
- uint64_t time6 = time5 + 1000;
- uint64_t time7 = time6 + 1000;
- uint64_t time8 = time7 + 1000;
- struct sCP56Time2a cpTime1;
- struct sCP56Time2a cpTime2;
- struct sCP56Time2a cpTime3;
- struct sCP56Time2a cpTime4;
- struct sCP56Time2a cpTime5;
- struct sCP56Time2a cpTime6;
- struct sCP56Time2a cpTime7;
- struct sCP56Time2a cpTime8;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- CP56Time2a_createFromMsTimestamp(&cpTime2, time2);
- CP56Time2a_createFromMsTimestamp(&cpTime3, time3);
- CP56Time2a_createFromMsTimestamp(&cpTime4, time4);
- CP56Time2a_createFromMsTimestamp(&cpTime5, time5);
- CP56Time2a_createFromMsTimestamp(&cpTime6, time6);
- CP56Time2a_createFromMsTimestamp(&cpTime7, time7);
- CP56Time2a_createFromMsTimestamp(&cpTime8, time8);
- nmv1 = MeasuredValueNormalizedWithCP56Time2a_create(NULL, 101, -0.5f, IEC60870_QUALITY_GOOD, &cpTime1);
- nmv2 = MeasuredValueNormalizedWithCP56Time2a_create(NULL, 102, -0.2f, IEC60870_QUALITY_OVERFLOW, &cpTime2);
- nmv3 = MeasuredValueNormalizedWithCP56Time2a_create(NULL, 103, -0.1f, IEC60870_QUALITY_RESERVED, &cpTime3);
- nmv4 = MeasuredValueNormalizedWithCP56Time2a_create(NULL, 104, 0, IEC60870_QUALITY_ELAPSED_TIME_INVALID, &cpTime4);
- nmv5 = MeasuredValueNormalizedWithCP56Time2a_create(NULL, 105, 0.2f, IEC60870_QUALITY_BLOCKED, &cpTime5);
- nmv6 = MeasuredValueNormalizedWithCP56Time2a_create(NULL, 106, 0.3f, IEC60870_QUALITY_SUBSTITUTED, &cpTime6);
- nmv7 = MeasuredValueNormalizedWithCP56Time2a_create(NULL, 107, 0.4f, IEC60870_QUALITY_NON_TOPICAL, &cpTime7);
- nmv8 = MeasuredValueNormalizedWithCP56Time2a_create(NULL, 108, 0.5f, IEC60870_QUALITY_INVALID, &cpTime8);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv8));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv1));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv2));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.1f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv3));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv4));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv5));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.3f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv6));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.4f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv7));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) nmv8);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv1);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv2);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv3);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv4);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv5);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv6);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv7);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(110, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueNormalizedWithCP56Time2a nmv1_dec = (MeasuredValueNormalizedWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- MeasuredValueNormalizedWithCP56Time2a nmv2_dec = (MeasuredValueNormalizedWithCP56Time2a) CS101_ASDU_getElement(asdu2, 1);
- MeasuredValueNormalizedWithCP56Time2a nmv3_dec = (MeasuredValueNormalizedWithCP56Time2a) CS101_ASDU_getElement(asdu2, 2);
- MeasuredValueNormalizedWithCP56Time2a nmv4_dec = (MeasuredValueNormalizedWithCP56Time2a) CS101_ASDU_getElement(asdu2, 3);
- MeasuredValueNormalizedWithCP56Time2a nmv5_dec = (MeasuredValueNormalizedWithCP56Time2a) CS101_ASDU_getElement(asdu2, 4);
- MeasuredValueNormalizedWithCP56Time2a nmv6_dec = (MeasuredValueNormalizedWithCP56Time2a) CS101_ASDU_getElement(asdu2, 5);
- MeasuredValueNormalizedWithCP56Time2a nmv7_dec = (MeasuredValueNormalizedWithCP56Time2a) CS101_ASDU_getElement(asdu2, 6);
- MeasuredValueNormalizedWithCP56Time2a nmv8_dec = (MeasuredValueNormalizedWithCP56Time2a) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )nmv1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )nmv2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject )nmv3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject )nmv4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject )nmv5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject )nmv6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject )nmv7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject )nmv8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueNormalized_getQuality((MeasuredValueNormalized )nmv8_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv1_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv2_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, -0.1f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv3_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv4_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.2f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv5_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.3f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv6_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.4f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv7_dec));
- TEST_ASSERT_FLOAT_WITHIN(0.01f, 0.5f, MeasuredValueNormalized_getValue((MeasuredValueNormalized )nmv8_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(MeasuredValueNormalizedWithCP56Time2a_getTimestamp(nmv1_dec)));
- TEST_ASSERT_EQUAL_UINT64(time2, CP56Time2a_toMsTimestamp(MeasuredValueNormalizedWithCP56Time2a_getTimestamp(nmv2_dec)));
- TEST_ASSERT_EQUAL_UINT64(time3, CP56Time2a_toMsTimestamp(MeasuredValueNormalizedWithCP56Time2a_getTimestamp(nmv3_dec)));
- TEST_ASSERT_EQUAL_UINT64(time4, CP56Time2a_toMsTimestamp(MeasuredValueNormalizedWithCP56Time2a_getTimestamp(nmv4_dec)));
- TEST_ASSERT_EQUAL_UINT64(time5, CP56Time2a_toMsTimestamp(MeasuredValueNormalizedWithCP56Time2a_getTimestamp(nmv5_dec)));
- TEST_ASSERT_EQUAL_UINT64(time6, CP56Time2a_toMsTimestamp(MeasuredValueNormalizedWithCP56Time2a_getTimestamp(nmv6_dec)));
- TEST_ASSERT_EQUAL_UINT64(time7, CP56Time2a_toMsTimestamp(MeasuredValueNormalizedWithCP56Time2a_getTimestamp(nmv7_dec)));
- TEST_ASSERT_EQUAL_UINT64(time8, CP56Time2a_toMsTimestamp(MeasuredValueNormalizedWithCP56Time2a_getTimestamp(nmv8_dec)));
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv1_dec);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv2_dec);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv3_dec);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv4_dec);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv5_dec);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv6_dec);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv7_dec);
- MeasuredValueNormalizedWithCP56Time2a_destroy(nmv8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_MeasuredValueScaled(void)
- {
- MeasuredValueScaled mvs1;
- MeasuredValueScaled mvs2;
- MeasuredValueScaled mvs3;
- MeasuredValueScaled mvs4;
- MeasuredValueScaled mvs5;
- MeasuredValueScaled mvs6;
- MeasuredValueScaled mvs7;
- MeasuredValueScaled mvs8;
- mvs1 = MeasuredValueScaled_create(NULL, 101, INT16_MAX, IEC60870_QUALITY_GOOD);
- mvs2 = MeasuredValueScaled_create(NULL, 102, INT16_MAX, IEC60870_QUALITY_OVERFLOW);
- mvs3 = MeasuredValueScaled_create(NULL, 103, INT16_MAX, IEC60870_QUALITY_RESERVED);
- mvs4 = MeasuredValueScaled_create(NULL, 104, INT16_MAX, IEC60870_QUALITY_ELAPSED_TIME_INVALID);
- mvs5 = MeasuredValueScaled_create(NULL, 105, INT16_MIN, IEC60870_QUALITY_BLOCKED);
- mvs6 = MeasuredValueScaled_create(NULL, 106, INT16_MIN, IEC60870_QUALITY_SUBSTITUTED);
- mvs7 = MeasuredValueScaled_create(NULL, 107, INT16_MIN, IEC60870_QUALITY_NON_TOPICAL);
- mvs8 = MeasuredValueScaled_create(NULL, 108, INT16_MIN, IEC60870_QUALITY_INVALID);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs8));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs1));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs2));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs3));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs4));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs5));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs6));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs7));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs8);
- MeasuredValueScaled_destroy(mvs1);
- MeasuredValueScaled_destroy(mvs2);
- MeasuredValueScaled_destroy(mvs3);
- MeasuredValueScaled_destroy(mvs4);
- MeasuredValueScaled_destroy(mvs5);
- MeasuredValueScaled_destroy(mvs6);
- MeasuredValueScaled_destroy(mvs7);
- MeasuredValueScaled_destroy(mvs8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(54, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueScaled mvs1_dec = (MeasuredValueScaled) CS101_ASDU_getElement(asdu2, 0);
- MeasuredValueScaled mvs2_dec = (MeasuredValueScaled) CS101_ASDU_getElement(asdu2, 1);
- MeasuredValueScaled mvs3_dec = (MeasuredValueScaled) CS101_ASDU_getElement(asdu2, 2);
- MeasuredValueScaled mvs4_dec = (MeasuredValueScaled) CS101_ASDU_getElement(asdu2, 3);
- MeasuredValueScaled mvs5_dec = (MeasuredValueScaled) CS101_ASDU_getElement(asdu2, 4);
- MeasuredValueScaled mvs6_dec = (MeasuredValueScaled) CS101_ASDU_getElement(asdu2, 5);
- MeasuredValueScaled mvs7_dec = (MeasuredValueScaled) CS101_ASDU_getElement(asdu2, 6);
- MeasuredValueScaled mvs8_dec = (MeasuredValueScaled) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )mvs1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )mvs2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject )mvs3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject )mvs4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject )mvs5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject )mvs6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject )mvs7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject )mvs8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs8_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs1_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs2_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs3_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs4_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs5_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs6_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs7_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs8_dec));
- MeasuredValueScaled_destroy(mvs1_dec);
- MeasuredValueScaled_destroy(mvs2_dec);
- MeasuredValueScaled_destroy(mvs3_dec);
- MeasuredValueScaled_destroy(mvs4_dec);
- MeasuredValueScaled_destroy(mvs5_dec);
- MeasuredValueScaled_destroy(mvs6_dec);
- MeasuredValueScaled_destroy(mvs7_dec);
- MeasuredValueScaled_destroy(mvs8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_MeasuredValueScaledWithCP24Time2a(void)
- {
- MeasuredValueScaledWithCP24Time2a mvs1;
- MeasuredValueScaledWithCP24Time2a mvs2;
- MeasuredValueScaledWithCP24Time2a mvs3;
- MeasuredValueScaledWithCP24Time2a mvs4;
- MeasuredValueScaledWithCP24Time2a mvs5;
- MeasuredValueScaledWithCP24Time2a mvs6;
- MeasuredValueScaledWithCP24Time2a mvs7;
- MeasuredValueScaledWithCP24Time2a mvs8;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- uint64_t time4 = time3 + 1000;
- uint64_t time5 = time4 + 1000;
- uint64_t time6 = time5 + 1000;
- uint64_t time7 = time6 + 1000;
- uint64_t time8 = time7 + 1000;
- struct sCP24Time2a cpTime1;
- struct sCP24Time2a cpTime2;
- struct sCP24Time2a cpTime3;
- struct sCP24Time2a cpTime4;
- struct sCP24Time2a cpTime5;
- struct sCP24Time2a cpTime6;
- struct sCP24Time2a cpTime7;
- struct sCP24Time2a cpTime8;
- bzero(&cpTime1, sizeof(struct sCP24Time2a));
- bzero(&cpTime2, sizeof(struct sCP24Time2a));
- bzero(&cpTime3, sizeof(struct sCP24Time2a));
- bzero(&cpTime4, sizeof(struct sCP24Time2a));
- bzero(&cpTime5, sizeof(struct sCP24Time2a));
- bzero(&cpTime6, sizeof(struct sCP24Time2a));
- bzero(&cpTime7, sizeof(struct sCP24Time2a));
- bzero(&cpTime8, sizeof(struct sCP24Time2a));
- CP24Time2a_setMinute(&cpTime1, 12);
- CP24Time2a_setMillisecond(&cpTime1, 24123);
- CP24Time2a_setMinute(&cpTime2, 54);
- CP24Time2a_setMillisecond(&cpTime2, 12345);
- CP24Time2a_setMinute(&cpTime3, 00);
- CP24Time2a_setMillisecond(&cpTime3, 00001);
- CP24Time2a_setMinute(&cpTime4, 12);
- CP24Time2a_setMillisecond(&cpTime4, 24123);
- CP24Time2a_setMinute(&cpTime5, 12);
- CP24Time2a_setMillisecond(&cpTime5, 24123);
- CP24Time2a_setMinute(&cpTime6, 12);
- CP24Time2a_setMillisecond(&cpTime6, 24123);
- CP24Time2a_setMinute(&cpTime7, 12);
- CP24Time2a_setMillisecond(&cpTime7, 24123);
- CP24Time2a_setMinute(&cpTime8, 12);
- CP24Time2a_setMillisecond(&cpTime8, 24123);
- mvs1 = MeasuredValueScaledWithCP24Time2a_create(NULL, 101, INT16_MAX, IEC60870_QUALITY_GOOD, &cpTime1);
- mvs2 = MeasuredValueScaledWithCP24Time2a_create(NULL, 102, INT16_MAX, IEC60870_QUALITY_OVERFLOW, &cpTime2);
- mvs3 = MeasuredValueScaledWithCP24Time2a_create(NULL, 103, INT16_MAX, IEC60870_QUALITY_RESERVED, &cpTime3);
- mvs4 = MeasuredValueScaledWithCP24Time2a_create(NULL, 104, INT16_MAX, IEC60870_QUALITY_ELAPSED_TIME_INVALID, &cpTime4);
- mvs5 = MeasuredValueScaledWithCP24Time2a_create(NULL, 105, INT16_MIN, IEC60870_QUALITY_BLOCKED, &cpTime5);
- mvs6 = MeasuredValueScaledWithCP24Time2a_create(NULL, 106, INT16_MIN, IEC60870_QUALITY_SUBSTITUTED, &cpTime6);
- mvs7 = MeasuredValueScaledWithCP24Time2a_create(NULL, 107, INT16_MIN, IEC60870_QUALITY_NON_TOPICAL, &cpTime7);
- mvs8 = MeasuredValueScaledWithCP24Time2a_create(NULL, 108, INT16_MIN, IEC60870_QUALITY_INVALID, &cpTime8);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs8));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs1));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs2));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs3));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs4));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs5));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs6));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs7));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs8);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs1);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs2);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs3);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs4);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs5);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs6);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs7);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(78, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueScaledWithCP24Time2a mvs1_dec = (MeasuredValueScaledWithCP24Time2a) CS101_ASDU_getElement(asdu2, 0);
- MeasuredValueScaledWithCP24Time2a mvs2_dec = (MeasuredValueScaledWithCP24Time2a) CS101_ASDU_getElement(asdu2, 1);
- MeasuredValueScaledWithCP24Time2a mvs3_dec = (MeasuredValueScaledWithCP24Time2a) CS101_ASDU_getElement(asdu2, 2);
- MeasuredValueScaledWithCP24Time2a mvs4_dec = (MeasuredValueScaledWithCP24Time2a) CS101_ASDU_getElement(asdu2, 3);
- MeasuredValueScaledWithCP24Time2a mvs5_dec = (MeasuredValueScaledWithCP24Time2a) CS101_ASDU_getElement(asdu2, 4);
- MeasuredValueScaledWithCP24Time2a mvs6_dec = (MeasuredValueScaledWithCP24Time2a) CS101_ASDU_getElement(asdu2, 5);
- MeasuredValueScaledWithCP24Time2a mvs7_dec = (MeasuredValueScaledWithCP24Time2a) CS101_ASDU_getElement(asdu2, 6);
- MeasuredValueScaledWithCP24Time2a mvs8_dec = (MeasuredValueScaledWithCP24Time2a) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )mvs1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )mvs2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject )mvs3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject )mvs4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject )mvs5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject )mvs6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject )mvs7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject )mvs8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs8_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs1_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs2_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs3_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs4_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs5_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs6_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs7_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs8_dec));
- CP24Time2a time1_dec = MeasuredValueScaledWithCP24Time2a_getTimestamp(mvs1_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time1_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time1_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time1_dec));
- CP24Time2a time2_dec = MeasuredValueScaledWithCP24Time2a_getTimestamp(mvs2_dec);
- TEST_ASSERT_EQUAL_INT(54, CP24Time2a_getMinute(time2_dec));
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getSecond(time2_dec));
- TEST_ASSERT_EQUAL_INT(345, CP24Time2a_getMillisecond(time2_dec));
- CP24Time2a time3_dec = MeasuredValueScaledWithCP24Time2a_getTimestamp(mvs3_dec);
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getMinute(time3_dec));
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getSecond(time3_dec));
- TEST_ASSERT_EQUAL_INT(1, CP24Time2a_getMillisecond(time3_dec));
- CP24Time2a time4_dec = MeasuredValueScaledWithCP24Time2a_getTimestamp(mvs4_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time4_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time4_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time4_dec));
- CP24Time2a time5_dec = MeasuredValueScaledWithCP24Time2a_getTimestamp(mvs5_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time5_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time5_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time5_dec));
- CP24Time2a time6_dec = MeasuredValueScaledWithCP24Time2a_getTimestamp(mvs6_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time6_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time6_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time6_dec));
- CP24Time2a time7_dec = MeasuredValueScaledWithCP24Time2a_getTimestamp(mvs7_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time7_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time7_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time7_dec));
- CP24Time2a time8_dec = MeasuredValueScaledWithCP24Time2a_getTimestamp(mvs8_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time8_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time8_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time8_dec));
- MeasuredValueScaledWithCP24Time2a_destroy(mvs1_dec);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs2_dec);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs3_dec);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs4_dec);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs5_dec);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs6_dec);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs7_dec);
- MeasuredValueScaledWithCP24Time2a_destroy(mvs8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_MeasuredValueScaledWithCP56Time2a(void)
- {
- MeasuredValueScaledWithCP56Time2a mvs1;
- MeasuredValueScaledWithCP56Time2a mvs2;
- MeasuredValueScaledWithCP56Time2a mvs3;
- MeasuredValueScaledWithCP56Time2a mvs4;
- MeasuredValueScaledWithCP56Time2a mvs5;
- MeasuredValueScaledWithCP56Time2a mvs6;
- MeasuredValueScaledWithCP56Time2a mvs7;
- MeasuredValueScaledWithCP56Time2a mvs8;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- uint64_t time4 = time3 + 1000;
- uint64_t time5 = time4 + 1000;
- uint64_t time6 = time5 + 1000;
- uint64_t time7 = time6 + 1000;
- uint64_t time8 = time7 + 1000;
- struct sCP56Time2a cpTime1;
- struct sCP56Time2a cpTime2;
- struct sCP56Time2a cpTime3;
- struct sCP56Time2a cpTime4;
- struct sCP56Time2a cpTime5;
- struct sCP56Time2a cpTime6;
- struct sCP56Time2a cpTime7;
- struct sCP56Time2a cpTime8;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- CP56Time2a_createFromMsTimestamp(&cpTime2, time2);
- CP56Time2a_createFromMsTimestamp(&cpTime3, time3);
- CP56Time2a_createFromMsTimestamp(&cpTime4, time4);
- CP56Time2a_createFromMsTimestamp(&cpTime5, time5);
- CP56Time2a_createFromMsTimestamp(&cpTime6, time6);
- CP56Time2a_createFromMsTimestamp(&cpTime7, time7);
- CP56Time2a_createFromMsTimestamp(&cpTime8, time8);
- mvs1 = MeasuredValueScaledWithCP56Time2a_create(NULL, 101, INT16_MAX, IEC60870_QUALITY_GOOD, &cpTime1);
- mvs2 = MeasuredValueScaledWithCP56Time2a_create(NULL, 102, INT16_MAX, IEC60870_QUALITY_OVERFLOW, &cpTime2);
- mvs3 = MeasuredValueScaledWithCP56Time2a_create(NULL, 103, INT16_MAX, IEC60870_QUALITY_RESERVED, &cpTime3);
- mvs4 = MeasuredValueScaledWithCP56Time2a_create(NULL, 104, INT16_MAX, IEC60870_QUALITY_ELAPSED_TIME_INVALID, &cpTime4);
- mvs5 = MeasuredValueScaledWithCP56Time2a_create(NULL, 105, INT16_MIN, IEC60870_QUALITY_BLOCKED, &cpTime5);
- mvs6 = MeasuredValueScaledWithCP56Time2a_create(NULL, 106, INT16_MIN, IEC60870_QUALITY_SUBSTITUTED, &cpTime6);
- mvs7 = MeasuredValueScaledWithCP56Time2a_create(NULL, 107, INT16_MIN, IEC60870_QUALITY_NON_TOPICAL, &cpTime7);
- mvs8 = MeasuredValueScaledWithCP56Time2a_create(NULL, 108, INT16_MIN, IEC60870_QUALITY_INVALID, &cpTime8);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs8));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs1));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs2));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs3));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs4));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs5));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs6));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs7));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs8);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs1);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs2);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs3);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs4);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs5);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs6);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs7);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(110, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueScaledWithCP56Time2a mvs1_dec = (MeasuredValueScaledWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- MeasuredValueScaledWithCP56Time2a mvs2_dec = (MeasuredValueScaledWithCP56Time2a) CS101_ASDU_getElement(asdu2, 1);
- MeasuredValueScaledWithCP56Time2a mvs3_dec = (MeasuredValueScaledWithCP56Time2a) CS101_ASDU_getElement(asdu2, 2);
- MeasuredValueScaledWithCP56Time2a mvs4_dec = (MeasuredValueScaledWithCP56Time2a) CS101_ASDU_getElement(asdu2, 3);
- MeasuredValueScaledWithCP56Time2a mvs5_dec = (MeasuredValueScaledWithCP56Time2a) CS101_ASDU_getElement(asdu2, 4);
- MeasuredValueScaledWithCP56Time2a mvs6_dec = (MeasuredValueScaledWithCP56Time2a) CS101_ASDU_getElement(asdu2, 5);
- MeasuredValueScaledWithCP56Time2a mvs7_dec = (MeasuredValueScaledWithCP56Time2a) CS101_ASDU_getElement(asdu2, 6);
- MeasuredValueScaledWithCP56Time2a mvs8_dec = (MeasuredValueScaledWithCP56Time2a) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )mvs1_dec));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )mvs2_dec));
- TEST_ASSERT_EQUAL_INT(103, InformationObject_getObjectAddress((InformationObject )mvs3_dec));
- TEST_ASSERT_EQUAL_INT(104, InformationObject_getObjectAddress((InformationObject )mvs4_dec));
- TEST_ASSERT_EQUAL_INT(105, InformationObject_getObjectAddress((InformationObject )mvs5_dec));
- TEST_ASSERT_EQUAL_INT(106, InformationObject_getObjectAddress((InformationObject )mvs6_dec));
- TEST_ASSERT_EQUAL_INT(107, InformationObject_getObjectAddress((InformationObject )mvs7_dec));
- TEST_ASSERT_EQUAL_INT(108, InformationObject_getObjectAddress((InformationObject )mvs8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueScaled_getQuality((MeasuredValueScaled )mvs8_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs1_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs2_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs3_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MAX, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs4_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs5_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs6_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs7_dec));
- TEST_ASSERT_EQUAL_INT(INT16_MIN, MeasuredValueScaled_getValue((MeasuredValueScaled )mvs8_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(MeasuredValueScaledWithCP56Time2a_getTimestamp(mvs1_dec)));
- TEST_ASSERT_EQUAL_UINT64(time2, CP56Time2a_toMsTimestamp(MeasuredValueScaledWithCP56Time2a_getTimestamp(mvs2_dec)));
- TEST_ASSERT_EQUAL_UINT64(time3, CP56Time2a_toMsTimestamp(MeasuredValueScaledWithCP56Time2a_getTimestamp(mvs3_dec)));
- TEST_ASSERT_EQUAL_UINT64(time4, CP56Time2a_toMsTimestamp(MeasuredValueScaledWithCP56Time2a_getTimestamp(mvs4_dec)));
- TEST_ASSERT_EQUAL_UINT64(time5, CP56Time2a_toMsTimestamp(MeasuredValueScaledWithCP56Time2a_getTimestamp(mvs5_dec)));
- TEST_ASSERT_EQUAL_UINT64(time6, CP56Time2a_toMsTimestamp(MeasuredValueScaledWithCP56Time2a_getTimestamp(mvs6_dec)));
- TEST_ASSERT_EQUAL_UINT64(time7, CP56Time2a_toMsTimestamp(MeasuredValueScaledWithCP56Time2a_getTimestamp(mvs7_dec)));
- TEST_ASSERT_EQUAL_UINT64(time8, CP56Time2a_toMsTimestamp(MeasuredValueScaledWithCP56Time2a_getTimestamp(mvs8_dec)));
- MeasuredValueScaledWithCP56Time2a_destroy(mvs1_dec);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs2_dec);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs3_dec);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs4_dec);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs5_dec);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs6_dec);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs7_dec);
- MeasuredValueScaledWithCP56Time2a_destroy(mvs8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_MeasuredValueShort(void)
- {
- MeasuredValueShort mvs1;
- MeasuredValueShort mvs2;
- MeasuredValueShort mvs3;
- MeasuredValueShort mvs4;
- MeasuredValueShort mvs5;
- MeasuredValueShort mvs6;
- MeasuredValueShort mvs7;
- MeasuredValueShort mvs8;
- mvs1 = MeasuredValueShort_create(NULL, 101, 10.5f, IEC60870_QUALITY_GOOD);
- mvs2 = MeasuredValueShort_create(NULL, 102, 11.5f, IEC60870_QUALITY_OVERFLOW);
- mvs3 = MeasuredValueShort_create(NULL, 103, 12.5f, IEC60870_QUALITY_RESERVED);
- mvs4 = MeasuredValueShort_create(NULL, 104, 13.5f, IEC60870_QUALITY_ELAPSED_TIME_INVALID);
- mvs5 = MeasuredValueShort_create(NULL, 105, 14.5f, IEC60870_QUALITY_BLOCKED);
- mvs6 = MeasuredValueShort_create(NULL, 106, 15.5f, IEC60870_QUALITY_SUBSTITUTED);
- mvs7 = MeasuredValueShort_create(NULL, 107, 16.5f, IEC60870_QUALITY_NON_TOPICAL);
- mvs8 = MeasuredValueShort_create(NULL, 108, 17.5f, IEC60870_QUALITY_INVALID);
- TEST_ASSERT_EQUAL_FLOAT(10.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs1));
- TEST_ASSERT_EQUAL_FLOAT(11.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs2));
- TEST_ASSERT_EQUAL_FLOAT(12.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs3));
- TEST_ASSERT_EQUAL_FLOAT(13.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs4));
- TEST_ASSERT_EQUAL_FLOAT(14.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs5));
- TEST_ASSERT_EQUAL_FLOAT(15.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs6));
- TEST_ASSERT_EQUAL_FLOAT(16.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs7));
- TEST_ASSERT_EQUAL_FLOAT(17.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs8));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueShort_getQuality(mvs1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueShort_getQuality(mvs2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueShort_getQuality(mvs3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueShort_getQuality(mvs4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueShort_getQuality(mvs5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueShort_getQuality(mvs6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueShort_getQuality(mvs7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueShort_getQuality(mvs8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs8);
- MeasuredValueShort_destroy(mvs1);
- MeasuredValueShort_destroy(mvs2);
- MeasuredValueShort_destroy(mvs3);
- MeasuredValueShort_destroy(mvs4);
- MeasuredValueShort_destroy(mvs5);
- MeasuredValueShort_destroy(mvs6);
- MeasuredValueShort_destroy(mvs7);
- MeasuredValueShort_destroy(mvs8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(70, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueShort mvs1_dec = (MeasuredValueShort) CS101_ASDU_getElement(asdu2, 0);
- MeasuredValueShort mvs2_dec = (MeasuredValueShort) CS101_ASDU_getElement(asdu2, 1);
- MeasuredValueShort mvs3_dec = (MeasuredValueShort) CS101_ASDU_getElement(asdu2, 2);
- MeasuredValueShort mvs4_dec = (MeasuredValueShort) CS101_ASDU_getElement(asdu2, 3);
- MeasuredValueShort mvs5_dec = (MeasuredValueShort) CS101_ASDU_getElement(asdu2, 4);
- MeasuredValueShort mvs6_dec = (MeasuredValueShort) CS101_ASDU_getElement(asdu2, 5);
- MeasuredValueShort mvs7_dec = (MeasuredValueShort) CS101_ASDU_getElement(asdu2, 6);
- MeasuredValueShort mvs8_dec = (MeasuredValueShort) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_FLOAT(10.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs1_dec));
- TEST_ASSERT_EQUAL_FLOAT(11.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs2_dec));
- TEST_ASSERT_EQUAL_FLOAT(12.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs3_dec));
- TEST_ASSERT_EQUAL_FLOAT(13.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs4_dec));
- TEST_ASSERT_EQUAL_FLOAT(14.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs5_dec));
- TEST_ASSERT_EQUAL_FLOAT(15.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs6_dec));
- TEST_ASSERT_EQUAL_FLOAT(16.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs7_dec));
- TEST_ASSERT_EQUAL_FLOAT(17.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueShort_getQuality(mvs1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueShort_getQuality(mvs2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueShort_getQuality(mvs3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueShort_getQuality(mvs4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueShort_getQuality(mvs5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueShort_getQuality(mvs6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueShort_getQuality(mvs7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueShort_getQuality(mvs8_dec));
- MeasuredValueShort_destroy(mvs1_dec);
- MeasuredValueShort_destroy(mvs2_dec);
- MeasuredValueShort_destroy(mvs3_dec);
- MeasuredValueShort_destroy(mvs4_dec);
- MeasuredValueShort_destroy(mvs5_dec);
- MeasuredValueShort_destroy(mvs6_dec);
- MeasuredValueShort_destroy(mvs7_dec);
- MeasuredValueShort_destroy(mvs8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_MeasuredValueShortWithCP24Time2a(void)
- {
- MeasuredValueShortWithCP24Time2a mvs1;
- MeasuredValueShortWithCP24Time2a mvs2;
- MeasuredValueShortWithCP24Time2a mvs3;
- MeasuredValueShortWithCP24Time2a mvs4;
- MeasuredValueShortWithCP24Time2a mvs5;
- MeasuredValueShortWithCP24Time2a mvs6;
- MeasuredValueShortWithCP24Time2a mvs7;
- MeasuredValueShortWithCP24Time2a mvs8;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- uint64_t time4 = time3 + 1000;
- uint64_t time5 = time4 + 1000;
- uint64_t time6 = time5 + 1000;
- uint64_t time7 = time6 + 1000;
- uint64_t time8 = time7 + 1000;
- struct sCP24Time2a cpTime1;
- struct sCP24Time2a cpTime2;
- struct sCP24Time2a cpTime3;
- struct sCP24Time2a cpTime4;
- struct sCP24Time2a cpTime5;
- struct sCP24Time2a cpTime6;
- struct sCP24Time2a cpTime7;
- struct sCP24Time2a cpTime8;
- bzero(&cpTime1, sizeof(struct sCP24Time2a));
- bzero(&cpTime2, sizeof(struct sCP24Time2a));
- bzero(&cpTime3, sizeof(struct sCP24Time2a));
- bzero(&cpTime4, sizeof(struct sCP24Time2a));
- bzero(&cpTime5, sizeof(struct sCP24Time2a));
- bzero(&cpTime6, sizeof(struct sCP24Time2a));
- bzero(&cpTime7, sizeof(struct sCP24Time2a));
- bzero(&cpTime8, sizeof(struct sCP24Time2a));
- CP24Time2a_setMinute(&cpTime1, 12);
- CP24Time2a_setMillisecond(&cpTime1, 24123);
- CP24Time2a_setMinute(&cpTime2, 54);
- CP24Time2a_setMillisecond(&cpTime2, 12345);
- CP24Time2a_setMinute(&cpTime3, 00);
- CP24Time2a_setMillisecond(&cpTime3, 00001);
- CP24Time2a_setMinute(&cpTime4, 12);
- CP24Time2a_setMillisecond(&cpTime4, 24123);
- CP24Time2a_setMinute(&cpTime5, 12);
- CP24Time2a_setMillisecond(&cpTime5, 24123);
- CP24Time2a_setMinute(&cpTime6, 12);
- CP24Time2a_setMillisecond(&cpTime6, 24123);
- CP24Time2a_setMinute(&cpTime7, 12);
- CP24Time2a_setMillisecond(&cpTime7, 24123);
- CP24Time2a_setMinute(&cpTime8, 12);
- CP24Time2a_setMillisecond(&cpTime8, 24123);
- mvs1 = MeasuredValueShortWithCP24Time2a_create(NULL, 101, 10.5f, IEC60870_QUALITY_GOOD, &cpTime1);
- mvs2 = MeasuredValueShortWithCP24Time2a_create(NULL, 102, 11.5f, IEC60870_QUALITY_OVERFLOW, &cpTime2);
- mvs3 = MeasuredValueShortWithCP24Time2a_create(NULL, 103, 12.5f, IEC60870_QUALITY_RESERVED, &cpTime3);
- mvs4 = MeasuredValueShortWithCP24Time2a_create(NULL, 104, 13.5f, IEC60870_QUALITY_ELAPSED_TIME_INVALID, &cpTime4);
- mvs5 = MeasuredValueShortWithCP24Time2a_create(NULL, 105, 14.5f, IEC60870_QUALITY_BLOCKED, &cpTime5);
- mvs6 = MeasuredValueShortWithCP24Time2a_create(NULL, 106, 15.5f, IEC60870_QUALITY_SUBSTITUTED, &cpTime6);
- mvs7 = MeasuredValueShortWithCP24Time2a_create(NULL, 107, 16.5f, IEC60870_QUALITY_NON_TOPICAL, &cpTime7);
- mvs8 = MeasuredValueShortWithCP24Time2a_create(NULL, 108, 17.5f, IEC60870_QUALITY_INVALID, &cpTime8);
- TEST_ASSERT_EQUAL_FLOAT(10.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs1));
- TEST_ASSERT_EQUAL_FLOAT(11.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs2));
- TEST_ASSERT_EQUAL_FLOAT(12.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs3));
- TEST_ASSERT_EQUAL_FLOAT(13.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs4));
- TEST_ASSERT_EQUAL_FLOAT(14.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs5));
- TEST_ASSERT_EQUAL_FLOAT(15.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs6));
- TEST_ASSERT_EQUAL_FLOAT(16.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs7));
- TEST_ASSERT_EQUAL_FLOAT(17.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs8));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueShort_getQuality((MeasuredValueShort )mvs1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueShort_getQuality((MeasuredValueShort )mvs2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueShort_getQuality((MeasuredValueShort )mvs4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueShort_getQuality((MeasuredValueShort )mvs7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueShort_getQuality((MeasuredValueShort )mvs8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs8);
- MeasuredValueShortWithCP24Time2a_destroy(mvs1);
- MeasuredValueShortWithCP24Time2a_destroy(mvs2);
- MeasuredValueShortWithCP24Time2a_destroy(mvs3);
- MeasuredValueShortWithCP24Time2a_destroy(mvs4);
- MeasuredValueShortWithCP24Time2a_destroy(mvs5);
- MeasuredValueShortWithCP24Time2a_destroy(mvs6);
- MeasuredValueShortWithCP24Time2a_destroy(mvs7);
- MeasuredValueShortWithCP24Time2a_destroy(mvs8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(94, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueShortWithCP24Time2a mvs1_dec = (MeasuredValueShortWithCP24Time2a) CS101_ASDU_getElement(asdu2, 0);
- MeasuredValueShortWithCP24Time2a mvs2_dec = (MeasuredValueShortWithCP24Time2a) CS101_ASDU_getElement(asdu2, 1);
- MeasuredValueShortWithCP24Time2a mvs3_dec = (MeasuredValueShortWithCP24Time2a) CS101_ASDU_getElement(asdu2, 2);
- MeasuredValueShortWithCP24Time2a mvs4_dec = (MeasuredValueShortWithCP24Time2a) CS101_ASDU_getElement(asdu2, 3);
- MeasuredValueShortWithCP24Time2a mvs5_dec = (MeasuredValueShortWithCP24Time2a) CS101_ASDU_getElement(asdu2, 4);
- MeasuredValueShortWithCP24Time2a mvs6_dec = (MeasuredValueShortWithCP24Time2a) CS101_ASDU_getElement(asdu2, 5);
- MeasuredValueShortWithCP24Time2a mvs7_dec = (MeasuredValueShortWithCP24Time2a) CS101_ASDU_getElement(asdu2, 6);
- MeasuredValueShortWithCP24Time2a mvs8_dec = (MeasuredValueShortWithCP24Time2a) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_FLOAT(10.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs1_dec));
- TEST_ASSERT_EQUAL_FLOAT(11.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs2_dec));
- TEST_ASSERT_EQUAL_FLOAT(12.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs3_dec));
- TEST_ASSERT_EQUAL_FLOAT(13.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs4_dec));
- TEST_ASSERT_EQUAL_FLOAT(14.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs5_dec));
- TEST_ASSERT_EQUAL_FLOAT(15.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs6_dec));
- TEST_ASSERT_EQUAL_FLOAT(16.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs7_dec));
- TEST_ASSERT_EQUAL_FLOAT(17.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueShort_getQuality((MeasuredValueShort )mvs1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueShort_getQuality((MeasuredValueShort )mvs2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueShort_getQuality((MeasuredValueShort )mvs4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueShort_getQuality((MeasuredValueShort )mvs7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueShort_getQuality((MeasuredValueShort )mvs8_dec));
- CP24Time2a time1_dec = MeasuredValueShortWithCP24Time2a_getTimestamp(mvs1_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time1_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time1_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time1_dec));
- CP24Time2a time2_dec = MeasuredValueShortWithCP24Time2a_getTimestamp(mvs2_dec);
- TEST_ASSERT_EQUAL_INT(54, CP24Time2a_getMinute(time2_dec));
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getSecond(time2_dec));
- TEST_ASSERT_EQUAL_INT(345, CP24Time2a_getMillisecond(time2_dec));
- CP24Time2a time3_dec = MeasuredValueShortWithCP24Time2a_getTimestamp(mvs3_dec);
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getMinute(time3_dec));
- TEST_ASSERT_EQUAL_INT(00, CP24Time2a_getSecond(time3_dec));
- TEST_ASSERT_EQUAL_INT(1, CP24Time2a_getMillisecond(time3_dec));
- CP24Time2a time4_dec = MeasuredValueShortWithCP24Time2a_getTimestamp(mvs4_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time4_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time4_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time4_dec));
- CP24Time2a time5_dec = MeasuredValueShortWithCP24Time2a_getTimestamp(mvs5_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time5_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time5_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time5_dec));
- CP24Time2a time6_dec = MeasuredValueShortWithCP24Time2a_getTimestamp(mvs6_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time6_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time6_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time6_dec));
- CP24Time2a time7_dec = MeasuredValueShortWithCP24Time2a_getTimestamp(mvs7_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time7_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time7_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time7_dec));
- CP24Time2a time8_dec = MeasuredValueShortWithCP24Time2a_getTimestamp(mvs8_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time8_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time8_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time8_dec));
- MeasuredValueShortWithCP24Time2a_destroy(mvs1_dec);
- MeasuredValueShortWithCP24Time2a_destroy(mvs2_dec);
- MeasuredValueShortWithCP24Time2a_destroy(mvs3_dec);
- MeasuredValueShortWithCP24Time2a_destroy(mvs4_dec);
- MeasuredValueShortWithCP24Time2a_destroy(mvs5_dec);
- MeasuredValueShortWithCP24Time2a_destroy(mvs6_dec);
- MeasuredValueShortWithCP24Time2a_destroy(mvs7_dec);
- MeasuredValueShortWithCP24Time2a_destroy(mvs8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_MeasuredValueShortWithCP56Time2a(void)
- {
- MeasuredValueShortWithCP56Time2a mvs1;
- MeasuredValueShortWithCP56Time2a mvs2;
- MeasuredValueShortWithCP56Time2a mvs3;
- MeasuredValueShortWithCP56Time2a mvs4;
- MeasuredValueShortWithCP56Time2a mvs5;
- MeasuredValueShortWithCP56Time2a mvs6;
- MeasuredValueShortWithCP56Time2a mvs7;
- MeasuredValueShortWithCP56Time2a mvs8;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- uint64_t time3 = time2 + 1000;
- uint64_t time4 = time3 + 1000;
- uint64_t time5 = time4 + 1000;
- uint64_t time6 = time5 + 1000;
- uint64_t time7 = time6 + 1000;
- uint64_t time8 = time7 + 1000;
- struct sCP56Time2a cpTime1;
- struct sCP56Time2a cpTime2;
- struct sCP56Time2a cpTime3;
- struct sCP56Time2a cpTime4;
- struct sCP56Time2a cpTime5;
- struct sCP56Time2a cpTime6;
- struct sCP56Time2a cpTime7;
- struct sCP56Time2a cpTime8;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- CP56Time2a_createFromMsTimestamp(&cpTime2, time2);
- CP56Time2a_createFromMsTimestamp(&cpTime3, time3);
- CP56Time2a_createFromMsTimestamp(&cpTime4, time4);
- CP56Time2a_createFromMsTimestamp(&cpTime5, time5);
- CP56Time2a_createFromMsTimestamp(&cpTime6, time6);
- CP56Time2a_createFromMsTimestamp(&cpTime7, time7);
- CP56Time2a_createFromMsTimestamp(&cpTime8, time8);
- mvs1 = MeasuredValueShortWithCP56Time2a_create(NULL, 101, 10.5f, IEC60870_QUALITY_GOOD, &cpTime1);
- mvs2 = MeasuredValueShortWithCP56Time2a_create(NULL, 102, 11.5f, IEC60870_QUALITY_OVERFLOW, &cpTime2);
- mvs3 = MeasuredValueShortWithCP56Time2a_create(NULL, 103, 12.5f, IEC60870_QUALITY_RESERVED, &cpTime3);
- mvs4 = MeasuredValueShortWithCP56Time2a_create(NULL, 104, 13.5f, IEC60870_QUALITY_ELAPSED_TIME_INVALID, &cpTime4);
- mvs5 = MeasuredValueShortWithCP56Time2a_create(NULL, 105, 14.5f, IEC60870_QUALITY_BLOCKED, &cpTime5);
- mvs6 = MeasuredValueShortWithCP56Time2a_create(NULL, 106, 15.5f, IEC60870_QUALITY_SUBSTITUTED, &cpTime6);
- mvs7 = MeasuredValueShortWithCP56Time2a_create(NULL, 107, 16.5f, IEC60870_QUALITY_NON_TOPICAL, &cpTime7);
- mvs8 = MeasuredValueShortWithCP56Time2a_create(NULL, 108, 17.5f, IEC60870_QUALITY_INVALID, &cpTime8);
- TEST_ASSERT_EQUAL_FLOAT(10.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs1));
- TEST_ASSERT_EQUAL_FLOAT(11.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs2));
- TEST_ASSERT_EQUAL_FLOAT(12.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs3));
- TEST_ASSERT_EQUAL_FLOAT(13.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs4));
- TEST_ASSERT_EQUAL_FLOAT(14.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs5));
- TEST_ASSERT_EQUAL_FLOAT(15.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs6));
- TEST_ASSERT_EQUAL_FLOAT(16.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs7));
- TEST_ASSERT_EQUAL_FLOAT(17.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs8));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueShort_getQuality((MeasuredValueShort )mvs1));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueShort_getQuality((MeasuredValueShort )mvs2));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs3));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueShort_getQuality((MeasuredValueShort )mvs4));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs5));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs6));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueShort_getQuality((MeasuredValueShort )mvs7));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueShort_getQuality((MeasuredValueShort )mvs8));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs3);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs4);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs5);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs6);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs7);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) mvs8);
- MeasuredValueShortWithCP56Time2a_destroy(mvs1);
- MeasuredValueShortWithCP56Time2a_destroy(mvs2);
- MeasuredValueShortWithCP56Time2a_destroy(mvs3);
- MeasuredValueShortWithCP56Time2a_destroy(mvs4);
- MeasuredValueShortWithCP56Time2a_destroy(mvs5);
- MeasuredValueShortWithCP56Time2a_destroy(mvs6);
- MeasuredValueShortWithCP56Time2a_destroy(mvs7);
- MeasuredValueShortWithCP56Time2a_destroy(mvs8);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(126, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(8, CS101_ASDU_getNumberOfElements(asdu2));
- MeasuredValueShortWithCP56Time2a mvs1_dec = (MeasuredValueShortWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- MeasuredValueShortWithCP56Time2a mvs2_dec = (MeasuredValueShortWithCP56Time2a) CS101_ASDU_getElement(asdu2, 1);
- MeasuredValueShortWithCP56Time2a mvs3_dec = (MeasuredValueShortWithCP56Time2a) CS101_ASDU_getElement(asdu2, 2);
- MeasuredValueShortWithCP56Time2a mvs4_dec = (MeasuredValueShortWithCP56Time2a) CS101_ASDU_getElement(asdu2, 3);
- MeasuredValueShortWithCP56Time2a mvs5_dec = (MeasuredValueShortWithCP56Time2a) CS101_ASDU_getElement(asdu2, 4);
- MeasuredValueShortWithCP56Time2a mvs6_dec = (MeasuredValueShortWithCP56Time2a) CS101_ASDU_getElement(asdu2, 5);
- MeasuredValueShortWithCP56Time2a mvs7_dec = (MeasuredValueShortWithCP56Time2a) CS101_ASDU_getElement(asdu2, 6);
- MeasuredValueShortWithCP56Time2a mvs8_dec = (MeasuredValueShortWithCP56Time2a) CS101_ASDU_getElement(asdu2, 7);
- TEST_ASSERT_EQUAL_FLOAT(10.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs1_dec));
- TEST_ASSERT_EQUAL_FLOAT(11.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs2_dec));
- TEST_ASSERT_EQUAL_FLOAT(12.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs3_dec));
- TEST_ASSERT_EQUAL_FLOAT(13.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs4_dec));
- TEST_ASSERT_EQUAL_FLOAT(14.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs5_dec));
- TEST_ASSERT_EQUAL_FLOAT(15.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs6_dec));
- TEST_ASSERT_EQUAL_FLOAT(16.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs7_dec));
- TEST_ASSERT_EQUAL_FLOAT(17.5f, MeasuredValueShort_getValue((MeasuredValueShort )mvs8_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, MeasuredValueShort_getQuality((MeasuredValueShort )mvs1_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_OVERFLOW, MeasuredValueShort_getQuality((MeasuredValueShort )mvs2_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_RESERVED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs3_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_ELAPSED_TIME_INVALID, MeasuredValueShort_getQuality((MeasuredValueShort )mvs4_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_BLOCKED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs5_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_SUBSTITUTED, MeasuredValueShort_getQuality((MeasuredValueShort )mvs6_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_NON_TOPICAL, MeasuredValueShort_getQuality((MeasuredValueShort )mvs7_dec));
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, MeasuredValueShort_getQuality((MeasuredValueShort )mvs8_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(MeasuredValueShortWithCP56Time2a_getTimestamp(mvs1_dec)));
- TEST_ASSERT_EQUAL_UINT64(time2, CP56Time2a_toMsTimestamp(MeasuredValueShortWithCP56Time2a_getTimestamp(mvs2_dec)));
- TEST_ASSERT_EQUAL_UINT64(time3, CP56Time2a_toMsTimestamp(MeasuredValueShortWithCP56Time2a_getTimestamp(mvs3_dec)));
- TEST_ASSERT_EQUAL_UINT64(time4, CP56Time2a_toMsTimestamp(MeasuredValueShortWithCP56Time2a_getTimestamp(mvs4_dec)));
- TEST_ASSERT_EQUAL_UINT64(time5, CP56Time2a_toMsTimestamp(MeasuredValueShortWithCP56Time2a_getTimestamp(mvs5_dec)));
- TEST_ASSERT_EQUAL_UINT64(time6, CP56Time2a_toMsTimestamp(MeasuredValueShortWithCP56Time2a_getTimestamp(mvs6_dec)));
- TEST_ASSERT_EQUAL_UINT64(time7, CP56Time2a_toMsTimestamp(MeasuredValueShortWithCP56Time2a_getTimestamp(mvs7_dec)));
- TEST_ASSERT_EQUAL_UINT64(time8, CP56Time2a_toMsTimestamp(MeasuredValueShortWithCP56Time2a_getTimestamp(mvs8_dec)));
- MeasuredValueShortWithCP56Time2a_destroy(mvs1_dec);
- MeasuredValueShortWithCP56Time2a_destroy(mvs2_dec);
- MeasuredValueShortWithCP56Time2a_destroy(mvs3_dec);
- MeasuredValueShortWithCP56Time2a_destroy(mvs4_dec);
- MeasuredValueShortWithCP56Time2a_destroy(mvs5_dec);
- MeasuredValueShortWithCP56Time2a_destroy(mvs6_dec);
- MeasuredValueShortWithCP56Time2a_destroy(mvs7_dec);
- MeasuredValueShortWithCP56Time2a_destroy(mvs8_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_IntegratedTotals(void)
- {
- IntegratedTotals it1;
- IntegratedTotals it2;
- BinaryCounterReading bcr1;
- BinaryCounterReading bcr2;
- bcr1 = BinaryCounterReading_create(NULL, INT32_MAX, 0, true, true, true);
- bcr2 = BinaryCounterReading_create(NULL, INT32_MIN, 15, false, false, false);
- it1 = IntegratedTotals_create(NULL, 101, bcr1);
- it2 = IntegratedTotals_create(NULL, 102, bcr2);
- BinaryCounterReading_destroy(bcr1);
- BinaryCounterReading_destroy(bcr2);
- TEST_ASSERT_EQUAL_INT32(INT32_MAX, BinaryCounterReading_getValue(IntegratedTotals_getBCR(it1)));
- TEST_ASSERT_EQUAL_UINT8(0, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR(it1)));
- TEST_ASSERT_TRUE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR(it1)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR(it1)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR(it1)));
- TEST_ASSERT_EQUAL_INT32(INT32_MIN, BinaryCounterReading_getValue(IntegratedTotals_getBCR(it2)));
- TEST_ASSERT_EQUAL_UINT8(15, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR(it2)));
- TEST_ASSERT_FALSE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR(it2)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR(it2)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR(it2)));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) it1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) it2);
- IntegratedTotals_destroy(it1);
- IntegratedTotals_destroy(it2);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(22, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(2, CS101_ASDU_getNumberOfElements(asdu2));
- IntegratedTotals it1_dec = (IntegratedTotals) CS101_ASDU_getElement(asdu2, 0);
- IntegratedTotals it2_dec = (IntegratedTotals) CS101_ASDU_getElement(asdu2, 1);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )it1_dec));
- TEST_ASSERT_EQUAL_INT32(INT32_MAX, BinaryCounterReading_getValue(IntegratedTotals_getBCR(it1_dec)));
- TEST_ASSERT_EQUAL_UINT8(0, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR(it1_dec)));
- TEST_ASSERT_TRUE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR(it1_dec)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR(it1_dec)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR(it1_dec)));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )it2_dec));
- TEST_ASSERT_EQUAL_INT32(INT32_MIN, BinaryCounterReading_getValue(IntegratedTotals_getBCR(it2_dec)));
- TEST_ASSERT_EQUAL_UINT8(15, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR(it2_dec)));
- TEST_ASSERT_FALSE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR(it2_dec)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR(it2_dec)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR(it2_dec)));
- IntegratedTotals_destroy(it1_dec);
- IntegratedTotals_destroy(it2_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_IntegratedTotalsWithCP24Time2a(void)
- {
- IntegratedTotalsWithCP24Time2a it1;
- IntegratedTotalsWithCP24Time2a it2;
- BinaryCounterReading bcr1;
- BinaryCounterReading bcr2;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- struct sCP24Time2a cpTime1;
- struct sCP24Time2a cpTime2;
- bzero(&cpTime1, sizeof(struct sCP24Time2a));
- bzero(&cpTime2, sizeof(struct sCP24Time2a));
- CP24Time2a_setMinute(&cpTime1, 12);
- CP24Time2a_setMillisecond(&cpTime1, 24123);
- CP24Time2a_setMinute(&cpTime2, 54);
- CP24Time2a_setMillisecond(&cpTime2, 12345);
- bcr1 = BinaryCounterReading_create(NULL, INT32_MAX, 0, true, true, true);
- bcr2 = BinaryCounterReading_create(NULL, INT32_MIN, 15, false, false, false);
- it1 = IntegratedTotalsWithCP24Time2a_create(NULL, 101, bcr1, &cpTime1);
- it2 = IntegratedTotalsWithCP24Time2a_create(NULL, 102, bcr2, &cpTime2);
- BinaryCounterReading_destroy(bcr1);
- BinaryCounterReading_destroy(bcr2);
- TEST_ASSERT_EQUAL_INT32(INT32_MAX, BinaryCounterReading_getValue(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_EQUAL_UINT8(0, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_TRUE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_EQUAL_INT32(INT32_MIN, BinaryCounterReading_getValue(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- TEST_ASSERT_EQUAL_UINT8(15, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- TEST_ASSERT_FALSE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) it1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) it2);
- IntegratedTotalsWithCP24Time2a_destroy(it1);
- IntegratedTotalsWithCP24Time2a_destroy(it2);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(28, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(2, CS101_ASDU_getNumberOfElements(asdu2));
- IntegratedTotalsWithCP24Time2a it1_dec = (IntegratedTotalsWithCP24Time2a) CS101_ASDU_getElement(asdu2, 0);
- IntegratedTotalsWithCP24Time2a it2_dec = (IntegratedTotalsWithCP24Time2a) CS101_ASDU_getElement(asdu2, 1);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )it1_dec));
- TEST_ASSERT_EQUAL_INT32(INT32_MAX, BinaryCounterReading_getValue(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_EQUAL_UINT8(0, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_TRUE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )it2_dec));
- TEST_ASSERT_EQUAL_INT32(INT32_MIN, BinaryCounterReading_getValue(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- TEST_ASSERT_EQUAL_UINT8(15, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- TEST_ASSERT_FALSE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- CP24Time2a time1_dec = IntegratedTotalsWithCP24Time2a_getTimestamp(it1_dec);
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getMinute(time1_dec));
- TEST_ASSERT_EQUAL_INT(24, CP24Time2a_getSecond(time1_dec));
- TEST_ASSERT_EQUAL_INT(123, CP24Time2a_getMillisecond(time1_dec));
- CP24Time2a time2_dec = IntegratedTotalsWithCP24Time2a_getTimestamp(it2_dec);
- TEST_ASSERT_EQUAL_INT(54, CP24Time2a_getMinute(time2_dec));
- TEST_ASSERT_EQUAL_INT(12, CP24Time2a_getSecond(time2_dec));
- TEST_ASSERT_EQUAL_INT(345, CP24Time2a_getMillisecond(time2_dec));
- IntegratedTotalsWithCP24Time2a_destroy(it1_dec);
- IntegratedTotalsWithCP24Time2a_destroy(it2_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_IntegratedTotalsWithCP56Time2a(void)
- {
- IntegratedTotalsWithCP56Time2a it1;
- IntegratedTotalsWithCP56Time2a it2;
- BinaryCounterReading bcr1;
- BinaryCounterReading bcr2;
- uint64_t time1 = Hal_getTimeInMs();
- uint64_t time2 = time1 + 1000;
- struct sCP56Time2a cpTime1;
- struct sCP56Time2a cpTime2;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- CP56Time2a_createFromMsTimestamp(&cpTime2, time2);
- bcr1 = BinaryCounterReading_create(NULL, INT32_MAX, 0, true, true, true);
- bcr2 = BinaryCounterReading_create(NULL, INT32_MIN, 15, false, false, false);
- it1 = IntegratedTotalsWithCP56Time2a_create(NULL, 101, bcr1, &cpTime1);
- it2 = IntegratedTotalsWithCP56Time2a_create(NULL, 102, bcr2, &cpTime2);
- BinaryCounterReading_destroy(bcr1);
- BinaryCounterReading_destroy(bcr2);
- TEST_ASSERT_EQUAL_INT32(INT32_MAX, BinaryCounterReading_getValue(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_EQUAL_UINT8(0, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_TRUE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR((IntegratedTotals )it1)));
- TEST_ASSERT_EQUAL_INT32(INT32_MIN, BinaryCounterReading_getValue(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- TEST_ASSERT_EQUAL_UINT8(15, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- TEST_ASSERT_FALSE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR((IntegratedTotals )it2)));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) it1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) it2);
- IntegratedTotalsWithCP56Time2a_destroy(it1);
- IntegratedTotalsWithCP56Time2a_destroy(it2);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(36, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(2, CS101_ASDU_getNumberOfElements(asdu2));
- IntegratedTotalsWithCP56Time2a it1_dec = (IntegratedTotalsWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- IntegratedTotalsWithCP56Time2a it2_dec = (IntegratedTotalsWithCP56Time2a) CS101_ASDU_getElement(asdu2, 1);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )it1_dec));
- TEST_ASSERT_EQUAL_INT32(INT32_MAX, BinaryCounterReading_getValue(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_EQUAL_UINT8(0, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_TRUE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_TRUE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR((IntegratedTotals )it1_dec)));
- TEST_ASSERT_EQUAL_INT(102, InformationObject_getObjectAddress((InformationObject )it2_dec));
- TEST_ASSERT_EQUAL_INT32(INT32_MIN, BinaryCounterReading_getValue(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- TEST_ASSERT_EQUAL_UINT8(15, BinaryCounterReading_getSequenceNumber(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- TEST_ASSERT_FALSE(BinaryCounterReading_hasCarry(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isAdjusted(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- TEST_ASSERT_FALSE(BinaryCounterReading_isInvalid(IntegratedTotals_getBCR((IntegratedTotals )it2_dec)));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(IntegratedTotalsWithCP56Time2a_getTimestamp(it1_dec)));
- TEST_ASSERT_EQUAL_UINT64(time2, CP56Time2a_toMsTimestamp(IntegratedTotalsWithCP56Time2a_getTimestamp(it2_dec)));
- IntegratedTotalsWithCP56Time2a_destroy(it1_dec);
- IntegratedTotalsWithCP56Time2a_destroy(it2_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SingleCommand(void)
- {
- SingleCommand sc;
- sc = SingleCommand_create(NULL, 101, true, true, 0);
- TEST_ASSERT_TRUE(SingleCommand_getState(sc));
- TEST_ASSERT_TRUE(SingleCommand_isSelect(sc));
- TEST_ASSERT_EQUAL_INT(0, SingleCommand_getQU(sc));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) sc);
- SingleCommand_destroy(sc);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(10, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- SingleCommand sc_dec = (SingleCommand) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )sc_dec));
- TEST_ASSERT_TRUE(SingleCommand_getState(sc_dec));
- TEST_ASSERT_TRUE(SingleCommand_isSelect(sc_dec));
- TEST_ASSERT_EQUAL_INT(0, SingleCommand_getQU(sc_dec));
- SingleCommand_destroy(sc_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SingleCommandWithCP56Time2a(void)
- {
- SingleCommandWithCP56Time2a sc;
- uint64_t time1 = Hal_getTimeInMs();
- struct sCP56Time2a cpTime1;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- sc = SingleCommandWithCP56Time2a_create(NULL, 101, true, true, 0, &cpTime1);
- TEST_ASSERT_TRUE(SingleCommand_getState((SingleCommand )sc));
- TEST_ASSERT_TRUE(SingleCommand_isSelect((SingleCommand )sc));
- TEST_ASSERT_EQUAL_INT(0, SingleCommand_getQU((SingleCommand )sc));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) sc);
- SingleCommandWithCP56Time2a_destroy(sc);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(17, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- SingleCommandWithCP56Time2a sc_dec = (SingleCommandWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )sc_dec));
- TEST_ASSERT_TRUE(SingleCommand_getState((SingleCommand )sc_dec));
- TEST_ASSERT_TRUE(SingleCommand_isSelect((SingleCommand )sc_dec));
- TEST_ASSERT_EQUAL_INT(0, SingleCommand_getQU((SingleCommand )sc_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(SingleCommandWithCP56Time2a_getTimestamp(sc_dec)));
- SingleCommandWithCP56Time2a_destroy(sc_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_DoubleCommand(void)
- {
- DoubleCommand dc;
- dc = DoubleCommand_create(NULL, 101, 1, true, 0);
- TEST_ASSERT_TRUE(DoubleCommand_isSelect(dc));
- TEST_ASSERT_EQUAL_INT(1, DoubleCommand_getState(dc));
- TEST_ASSERT_EQUAL_INT(0, DoubleCommand_getQU(dc));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dc);
- DoubleCommand_destroy(dc);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(10, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- DoubleCommand dc_dec = (DoubleCommand) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )dc_dec));
- TEST_ASSERT_TRUE(DoubleCommand_isSelect(dc_dec));
- TEST_ASSERT_EQUAL_INT(1, DoubleCommand_getState(dc_dec));
- TEST_ASSERT_EQUAL_INT(0, DoubleCommand_getQU(dc_dec));
- DoubleCommand_destroy(dc_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_DoubleCommandWithCP56Time2a(void)
- {
- DoubleCommandWithCP56Time2a dc;
- uint64_t time1 = Hal_getTimeInMs();
- struct sCP56Time2a cpTime1;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- dc = DoubleCommandWithCP56Time2a_create(NULL, 101, 1, true, 0, &cpTime1);
- TEST_ASSERT_TRUE(DoubleCommandWithCP56Time2a_isSelect(dc));
- TEST_ASSERT_EQUAL_INT(1, DoubleCommandWithCP56Time2a_getState(dc));
- TEST_ASSERT_EQUAL_INT(0, DoubleCommandWithCP56Time2a_getQU(dc));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dc);
- DoubleCommandWithCP56Time2a_destroy(dc);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(17, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- DoubleCommandWithCP56Time2a dc_dec = (DoubleCommandWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )dc_dec));
- TEST_ASSERT_TRUE(DoubleCommandWithCP56Time2a_isSelect(dc_dec));
- TEST_ASSERT_EQUAL_INT(1, DoubleCommandWithCP56Time2a_getState(dc_dec));
- TEST_ASSERT_EQUAL_INT(0, DoubleCommandWithCP56Time2a_getQU(dc_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(DoubleCommandWithCP56Time2a_getTimestamp(dc_dec)));
- DoubleCommandWithCP56Time2a_destroy(dc_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_StepCommandValue(void)
- {
- StepCommand scv;
- scv = StepCommand_create(NULL, 101, IEC60870_STEP_INVALID_0, true, 0);
- TEST_ASSERT_TRUE(StepCommand_isSelect(scv));
- TEST_ASSERT_EQUAL_INT(IEC60870_STEP_INVALID_0, StepCommand_getState(scv));
- TEST_ASSERT_EQUAL_INT(0, StepCommand_getQU(scv));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) scv);
- StepCommand_destroy(scv);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(10, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- StepCommand scv_dec = (StepCommand) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )scv_dec));
- TEST_ASSERT_TRUE(StepCommand_isSelect(scv_dec));
- TEST_ASSERT_EQUAL_INT(IEC60870_STEP_INVALID_0, StepCommand_getState(scv_dec));
- TEST_ASSERT_EQUAL_INT(0, StepCommand_getQU(scv_dec));
- StepCommand_destroy(scv_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_StepCommandWithCP56Time2a(void)
- {
- StepCommandWithCP56Time2a scv;
- uint64_t time1 = Hal_getTimeInMs();
- struct sCP56Time2a cpTime1;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- scv = StepCommandWithCP56Time2a_create(NULL, 101, IEC60870_STEP_INVALID_0, true, 0, &cpTime1);
- TEST_ASSERT_TRUE(StepCommandWithCP56Time2a_isSelect(scv));
- TEST_ASSERT_EQUAL_INT(IEC60870_STEP_INVALID_0, StepCommandWithCP56Time2a_getState(scv));
- TEST_ASSERT_EQUAL_INT(0, StepCommandWithCP56Time2a_getQU(scv));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) scv);
- StepCommandWithCP56Time2a_destroy((StepCommandWithCP56Time2a) scv);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(17, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- StepCommandWithCP56Time2a scv_dec = (StepCommandWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )scv_dec));
- TEST_ASSERT_TRUE(StepCommandWithCP56Time2a_isSelect(scv_dec));
- TEST_ASSERT_EQUAL_INT(IEC60870_STEP_INVALID_0, StepCommandWithCP56Time2a_getState(scv_dec));
- TEST_ASSERT_EQUAL_INT(0, StepCommandWithCP56Time2a_getQU(scv_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(StepCommandWithCP56Time2a_getTimestamp(scv_dec)));
- StepCommandWithCP56Time2a_destroy((StepCommandWithCP56Time2a) scv_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SetpointCommandNormalized(void)
- {
- SetpointCommandNormalized spcn;
- spcn = SetpointCommandNormalized_create(NULL, 101, -1, true, 0);
- TEST_ASSERT_EQUAL_INT(-1, SetpointCommandNormalized_getValue(spcn));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandNormalized_getQL(spcn));
- TEST_ASSERT_TRUE(SetpointCommandNormalized_isSelect(spcn));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spcn);
- SetpointCommandNormalized_destroy(spcn);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(12, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- SetpointCommandNormalized spcn_dec = (SetpointCommandNormalized) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )spcn_dec));
- TEST_ASSERT_EQUAL_INT(-1, SetpointCommandNormalized_getValue(spcn_dec));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandNormalized_getQL(spcn_dec));
- TEST_ASSERT_TRUE(SetpointCommandNormalized_isSelect(spcn_dec));
- SetpointCommandNormalized_destroy(spcn_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SetpointCommandNormalizedWithCP56Time2a(void)
- {
- SetpointCommandNormalizedWithCP56Time2a spcn;
- uint64_t time1 = Hal_getTimeInMs();
- struct sCP56Time2a cpTime1;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- spcn = SetpointCommandNormalizedWithCP56Time2a_create(NULL, 101, 0, true, 0, &cpTime1);
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandNormalizedWithCP56Time2a_getValue(spcn));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandNormalizedWithCP56Time2a_getQL(spcn));
- TEST_ASSERT_TRUE(SetpointCommandNormalizedWithCP56Time2a_isSelect(spcn));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spcn);
- SetpointCommandNormalizedWithCP56Time2a_destroy(spcn);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(19, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- SetpointCommandNormalizedWithCP56Time2a spcn_dec = (SetpointCommandNormalizedWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )spcn_dec));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandNormalizedWithCP56Time2a_getValue(spcn_dec));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandNormalizedWithCP56Time2a_getQL(spcn_dec));
- TEST_ASSERT_TRUE(SetpointCommandNormalizedWithCP56Time2a_isSelect(spcn_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(SetpointCommandNormalizedWithCP56Time2a_getTimestamp(spcn_dec)));
- SetpointCommandNormalizedWithCP56Time2a_destroy(spcn_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SetpointCommandScaled(void)
- {
- SetpointCommandScaled spcs;
- spcs = SetpointCommandScaled_create(NULL, 101, -32768, true, 0);
- TEST_ASSERT_EQUAL_INT(-32768, SetpointCommandScaled_getValue(spcs));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandScaled_getQL(spcs));
- TEST_ASSERT_TRUE(SetpointCommandScaled_isSelect(spcs));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spcs);
- SetpointCommandScaled_destroy(spcs);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(12, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- SetpointCommandScaled spcs_dec = (SetpointCommandScaled) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )spcs_dec));
- TEST_ASSERT_EQUAL_INT(-32768, SetpointCommandScaled_getValue(spcs_dec));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandScaled_getQL(spcs_dec));
- TEST_ASSERT_TRUE(SetpointCommandScaled_isSelect(spcs_dec));
- SetpointCommandScaled_destroy(spcs_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SetpointCommandScaledWithCP56Time2a(void)
- {
- SetpointCommandScaledWithCP56Time2a spcs;
- uint64_t time1 = Hal_getTimeInMs();
- struct sCP56Time2a cpTime1;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- spcs = SetpointCommandScaledWithCP56Time2a_create(NULL, 101, -32768, true, 0, &cpTime1);
- TEST_ASSERT_EQUAL_INT(-32768, SetpointCommandScaledWithCP56Time2a_getValue(spcs));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandScaledWithCP56Time2a_getQL(spcs));
- TEST_ASSERT_TRUE(SetpointCommandScaledWithCP56Time2a_isSelect(spcs));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spcs);
- SetpointCommandScaledWithCP56Time2a_destroy(spcs);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(19, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- SetpointCommandScaledWithCP56Time2a spcs_dec = (SetpointCommandScaledWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )spcs_dec));
- TEST_ASSERT_EQUAL_INT(-32768, SetpointCommandScaledWithCP56Time2a_getValue(spcs_dec));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandScaledWithCP56Time2a_getQL(spcs_dec));
- TEST_ASSERT_TRUE(SetpointCommandScaledWithCP56Time2a_isSelect(spcs_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(SetpointCommandScaledWithCP56Time2a_getTimestamp(spcs_dec)));
- SetpointCommandScaledWithCP56Time2a_destroy(spcs_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SetpointCommandShort(void)
- {
- SetpointCommandShort spcs;
- spcs = SetpointCommandShort_create(NULL, 101, 10.5f, true, 0);
- TEST_ASSERT_EQUAL_FLOAT(10.5f, SetpointCommandShort_getValue(spcs));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandShort_getQL(spcs));
- TEST_ASSERT_TRUE(SetpointCommandShort_isSelect(spcs));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spcs);
- SetpointCommandShort_destroy(spcs);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(14, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- SetpointCommandShort spcs_dec = (SetpointCommandShort) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )spcs_dec));
- TEST_ASSERT_EQUAL_FLOAT(10.5f, SetpointCommandShort_getValue(spcs_dec));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandShort_getQL(spcs_dec));
- TEST_ASSERT_TRUE(SetpointCommandShort_isSelect(spcs_dec));
- SetpointCommandShort_destroy(spcs_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_SetpointCommandShortWithCP56Time2a(void)
- {
- SetpointCommandShortWithCP56Time2a spcs;
- uint64_t time1 = Hal_getTimeInMs();
- struct sCP56Time2a cpTime1;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- spcs = SetpointCommandShortWithCP56Time2a_create(NULL, 101, 10.5f, true, 0, &cpTime1);
- TEST_ASSERT_EQUAL_FLOAT(10.5f, SetpointCommandShortWithCP56Time2a_getValue(spcs));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandShortWithCP56Time2a_getQL(spcs));
- TEST_ASSERT_TRUE(SetpointCommandShortWithCP56Time2a_isSelect(spcs));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) spcs);
- SetpointCommandShortWithCP56Time2a_destroy(spcs);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(21, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- SetpointCommandShortWithCP56Time2a spcs_dec = (SetpointCommandShortWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )spcs_dec));
- TEST_ASSERT_EQUAL_FLOAT(10.5f, SetpointCommandShortWithCP56Time2a_getValue(spcs_dec));
- TEST_ASSERT_EQUAL_INT(0, SetpointCommandShortWithCP56Time2a_getQL(spcs_dec));
- TEST_ASSERT_TRUE(SetpointCommandShortWithCP56Time2a_isSelect(spcs_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(SetpointCommandShortWithCP56Time2a_getTimestamp(spcs_dec)));
- SetpointCommandShortWithCP56Time2a_destroy(spcs_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_InterrogationCommand(void)
- {
- InterrogationCommand ic;
- uint8_t qoi = 21;
- ic = InterrogationCommand_create(NULL, 101, qoi);
- TEST_ASSERT_EQUAL_INT(21, InterrogationCommand_getQOI(ic));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) ic);
- InterrogationCommand_destroy(ic);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(10, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- InterrogationCommand ic_dec = (InterrogationCommand) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )ic_dec));
- TEST_ASSERT_EQUAL_INT(21, InterrogationCommand_getQOI(ic_dec));
- InterrogationCommand_destroy(ic_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_CounterInterrogationCommand(void)
- {
- CounterInterrogationCommand cic;
- uint8_t qcc = 1;
- cic = CounterInterrogationCommand_create(NULL, 101, qcc);
- TEST_ASSERT_EQUAL_INT(1, CounterInterrogationCommand_getQCC(cic));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) cic);
- CounterInterrogationCommand_destroy(cic);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(10, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- CounterInterrogationCommand cic_dec = (CounterInterrogationCommand) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )cic_dec));
- TEST_ASSERT_EQUAL_INT(1, CounterInterrogationCommand_getQCC(cic_dec));
- CounterInterrogationCommand_destroy(cic_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_ReadCommand(void)
- {
- ReadCommand rc;
- rc = ReadCommand_create( NULL, 101);
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) rc);
- ReadCommand_destroy(rc);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(9, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- ReadCommand rc_dec = (ReadCommand) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )rc_dec));
- ReadCommand_destroy(rc_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_ClockSynchronizationCommand(void)
- {
- ClockSynchronizationCommand csc;
- uint64_t time1 = Hal_getTimeInMs();
- struct sCP56Time2a cpTime1;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- csc = ClockSynchronizationCommand_create(NULL, 101, &cpTime1);
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) csc);
- ClockSynchronizationCommand_destroy(csc);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(16, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- ClockSynchronizationCommand csc_dec = (ClockSynchronizationCommand) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )csc_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(ClockSynchronizationCommand_getTime(csc_dec)));
- ClockSynchronizationCommand_destroy(csc_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_ResetProcessCommand(void)
- {
- ResetProcessCommand rpc;
- uint8_t qrp = 0;
- rpc = ResetProcessCommand_create(NULL, 101, qrp);
- TEST_ASSERT_EQUAL_INT(0, ResetProcessCommand_getQRP(rpc));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) rpc);
- ResetProcessCommand_destroy(rpc);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(10, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- ResetProcessCommand rpc_dec = (ResetProcessCommand) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )rpc_dec));
- TEST_ASSERT_EQUAL_INT(0, ResetProcessCommand_getQRP(rpc_dec));
- ResetProcessCommand_destroy(rpc_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_DelayAcquisitionCommand(void)
- {
- DelayAcquisitionCommand dac;
- uint64_t time1 = Hal_getTimeInMs();
- struct sCP16Time2a delay;
- bzero(&delay, sizeof(struct sCP16Time2a));
- CP16Time2a_setEplapsedTimeInMs(&delay, 24123);
- dac = DelayAcquisitionCommand_create(NULL, 101, &delay);
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) dac);
- DelayAcquisitionCommand_destroy(dac);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(11, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- DelayAcquisitionCommand dac_dec = (DelayAcquisitionCommand) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )dac_dec));
- CP16Time2a time1_dec = DelayAcquisitionCommand_getDelay(dac_dec);
- TEST_ASSERT_EQUAL_INT(24123, CP16Time2a_getEplapsedTimeInMs(time1_dec));
- DelayAcquisitionCommand_destroy(dac_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_BitString32(void)
- {
- BitString32 bs32;
- bs32 = BitString32_createEx(NULL, 101, 0xaaaa, IEC60870_QUALITY_INVALID);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, BitString32_getQuality(bs32));
- BitString32_destroy(bs32);
- bs32 = BitString32_create(NULL, 101, 0xaaaa);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, BitString32_getQuality(bs32));
- BitString32_destroy(bs32);
- bs32 = BitString32_createEx(NULL, 101, 0xaaaa, IEC60870_QUALITY_INVALID | IEC60870_QUALITY_NON_TOPICAL);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID + IEC60870_QUALITY_NON_TOPICAL, BitString32_getQuality(bs32));
- TEST_ASSERT_EQUAL_UINT32(0xaaaa, BitString32_getValue(bs32));
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject ) bs32));
- BitString32_destroy(bs32);
- Bitstring32WithCP24Time2a bs32cp24;
- struct sCP24Time2a cp24;
- bs32cp24 = Bitstring32WithCP24Time2a_createEx(NULL, 100002, 0xbbbb, IEC60870_QUALITY_INVALID, &cp24);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID, BitString32_getQuality((BitString32 )bs32cp24));
- TEST_ASSERT_EQUAL_UINT32(0xbbbb, BitString32_getValue((BitString32 )bs32cp24));
- TEST_ASSERT_EQUAL_INT(100002, InformationObject_getObjectAddress((InformationObject ) bs32cp24));
- Bitstring32WithCP24Time2a_destroy(bs32cp24);
- bs32cp24 = Bitstring32WithCP24Time2a_create(NULL, 100002, 0xbbbb, &cp24);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, BitString32_getQuality((BitString32 )bs32cp24));
- TEST_ASSERT_EQUAL_UINT32(0xbbbb, BitString32_getValue((BitString32 )bs32cp24));
- TEST_ASSERT_EQUAL_INT(100002, InformationObject_getObjectAddress((InformationObject ) bs32cp24));
- Bitstring32WithCP24Time2a_destroy(bs32cp24);
- Bitstring32WithCP56Time2a bs32cp56;
- struct sCP56Time2a cp56;
- bs32cp56 = Bitstring32WithCP56Time2a_createEx(NULL, 1000002, 0xcccc, IEC60870_QUALITY_INVALID | IEC60870_QUALITY_NON_TOPICAL, &cp56);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_INVALID + IEC60870_QUALITY_NON_TOPICAL, BitString32_getQuality((BitString32 )bs32cp56));
- TEST_ASSERT_EQUAL_UINT32(0xcccc, BitString32_getValue((BitString32 )bs32cp56));
- TEST_ASSERT_EQUAL_INT(1000002, InformationObject_getObjectAddress((InformationObject ) bs32cp56));
- Bitstring32WithCP56Time2a_destroy(bs32cp56);
- bs32cp56 = Bitstring32WithCP56Time2a_create(NULL, 1000002, 0xcccc, &cp56);
- TEST_ASSERT_EQUAL_UINT8(IEC60870_QUALITY_GOOD, BitString32_getQuality((BitString32 )bs32cp56));
- TEST_ASSERT_EQUAL_UINT32(0xcccc, BitString32_getValue((BitString32 )bs32cp56));
- TEST_ASSERT_EQUAL_INT(1000002, InformationObject_getObjectAddress((InformationObject ) bs32cp56));
- Bitstring32WithCP56Time2a_destroy(bs32cp56);
- }
- void
- test_Bitstring32CommandWithCP56Time2a(void)
- {
- Bitstring32CommandWithCP56Time2a bsc;
- uint64_t time1 = Hal_getTimeInMs();
- struct sCP56Time2a cpTime1;
- CP56Time2a_createFromMsTimestamp(&cpTime1, time1);
- bsc = Bitstring32CommandWithCP56Time2a_create(NULL, 101, (uint32_t) 0x0000000000, &cpTime1);
- TEST_ASSERT_EQUAL_UINT32(0x0000000000, Bitstring32CommandWithCP56Time2a_getValue(bsc));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) bsc);
- Bitstring32CommandWithCP56Time2a_destroy(bsc);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(20, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- Bitstring32CommandWithCP56Time2a bsc_dec = (Bitstring32CommandWithCP56Time2a) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )bsc_dec));
- TEST_ASSERT_EQUAL_UINT64(time1, CP56Time2a_toMsTimestamp(Bitstring32CommandWithCP56Time2a_getTimestamp(bsc_dec)));
- TEST_ASSERT_EQUAL_UINT32(0x0000000000, Bitstring32CommandWithCP56Time2a_getValue(bsc_dec));
- Bitstring32CommandWithCP56Time2a_destroy(bsc_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_QueryLog(void)
- {
- QueryLog queryLog;
- uint64_t stopTime = Hal_getTimeInMs();
- uint64_t startTime = stopTime - 2000;
- struct sCP56Time2a rangeStartTime;
- struct sCP56Time2a rangeStopTime;
- CP56Time2a_createFromMsTimestamp(&rangeStartTime, startTime);
- CP56Time2a_createFromMsTimestamp(&rangeStopTime, stopTime);
- queryLog = QueryLog_create(NULL, 101, 256, &rangeStartTime, &rangeStopTime);
- TEST_ASSERT_EQUAL_UINT16(256, QueryLog_getNOF(queryLog));
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_ACTIVATION, 0, 1, false, false);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) queryLog);
- QueryLog_destroy(queryLog);
- CS101_ASDU_encode(asdu, f);
- TEST_ASSERT_EQUAL_INT(25, Frame_getMsgSize(f));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- TEST_ASSERT_EQUAL_INT(1, CS101_ASDU_getNumberOfElements(asdu2));
- QueryLog queryLog_dec = (QueryLog) CS101_ASDU_getElement(asdu2, 0);
- TEST_ASSERT_NOT_NULL(queryLog_dec);
- TEST_ASSERT_EQUAL_INT(101, InformationObject_getObjectAddress((InformationObject )queryLog_dec));
- TEST_ASSERT_EQUAL_UINT16(256, QueryLog_getNOF(queryLog_dec));
- TEST_ASSERT_EQUAL_UINT64(startTime, CP56Time2a_toMsTimestamp(QueryLog_getRangeStartTime(queryLog_dec)));
- TEST_ASSERT_EQUAL_UINT64(stopTime, CP56Time2a_toMsTimestamp(QueryLog_getRangeStopTime(queryLog_dec)));
- QueryLog_destroy(queryLog_dec);
- CS101_ASDU_destroy(asdu2);
- }
- void
- test_BitString32xx_encodeDecode(void)
- {
- #ifndef _WIN32
- uint8_t buffer[256];
- struct sBufferFrame bf;
- Frame f = BufferFrame_initialize(&bf, buffer, 0);
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- BitString32 bs32_1 = BitString32_createEx(NULL, 101, (uint32_t) 0xaaaaaaaaaa, IEC60870_QUALITY_INVALID);
- BitString32 bs32_2 = BitString32_create(NULL, 102, (uint32_t) 0x0000000000);
- BitString32 bs32_3 = BitString32_create(NULL, 103, (uint32_t) 0xffffffffffUL);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) bs32_1);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) bs32_2);
- CS101_ASDU_addInformationObject(asdu, (InformationObject) bs32_3);
- CS101_ASDU_encode(asdu, f);
- InformationObject_destroy((InformationObject) bs32_1);
- InformationObject_destroy((InformationObject) bs32_2);
- InformationObject_destroy((InformationObject) bs32_3);
- CS101_ASDU_destroy(asdu);
- CS101_ASDU asdu2 = CS101_ASDU_createFromBuffer(&defaultAppLayerParameters, buffer, Frame_getMsgSize(f));
- BitString32 bs32_1_dec = (BitString32) CS101_ASDU_getElement(asdu2, 0);
- BitString32 bs32_2_dec = (BitString32) CS101_ASDU_getElement(asdu2, 1);
- BitString32 bs32_3_dec = (BitString32) CS101_ASDU_getElement(asdu2, 2);
- TEST_ASSERT_EQUAL_UINT32(0xaaaaaaaaaaUL, BitString32_getValue(bs32_1_dec));
- TEST_ASSERT_EQUAL_INT(IEC60870_QUALITY_INVALID, BitString32_getQuality(bs32_1_dec));
- TEST_ASSERT_EQUAL_UINT32(0x0000000000UL, BitString32_getValue(bs32_2_dec));
- TEST_ASSERT_EQUAL_INT(IEC60870_QUALITY_GOOD, BitString32_getQuality(bs32_2_dec));
- TEST_ASSERT_EQUAL_UINT32(0xffffffffUL, BitString32_getValue(bs32_3_dec));
- TEST_ASSERT_EQUAL_INT(IEC60870_QUALITY_GOOD, BitString32_getQuality(bs32_3_dec));
- InformationObject_destroy((InformationObject)bs32_1_dec);
- InformationObject_destroy((InformationObject)bs32_2_dec);
- InformationObject_destroy((InformationObject)bs32_3_dec);
- CS101_ASDU_destroy(asdu2);
- #endif
- }
- void
- test_version_number(void)
- {
- Lib60870VersionInfo version = Lib60870_getLibraryVersionInfo();
- TEST_ASSERT_EQUAL_INT(2, version.major);
- TEST_ASSERT_EQUAL_INT(3, version.minor);
- TEST_ASSERT_EQUAL_INT(3, version.patch);
- }
- void
- test_CS104_Slave_CreateDestroy(void)
- {
- CS104_Slave slave = CS104_Slave_create(100, 100);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_destroy(slave);
- }
- void
- test_CS104_Connection_CreateDestroy(void)
- {
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 2404);
- TEST_ASSERT_NOT_NULL(con);
- CS104_Connection_destroy(con);
- }
- void
- test_CS104_MasterSlave_CreateDestroy(void)
- {
- CS104_Slave slave = CS104_Slave_create(100, 100);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 20004);
- TEST_ASSERT_NOT_NULL(con);
- CS104_Connection_connect(con);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- }
- void
- test_CS104_MasterSlave_CreateDestroyLoop(void)
- {
- CS104_Slave slave = NULL;
- CS104_Connection con = NULL;
- for (int i = 0; i < 1000; i++) {
- slave = CS104_Slave_create(100, 100);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- con = CS104_Connection_create("127.0.0.1", 20004);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- }
- }
- void
- test_CS104_Connection_ConnectTimeout(void)
- {
- CS104_Connection con = CS104_Connection_create("192.168.3.120", 2404);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_FALSE(result);
- CS104_Connection_destroy(con);
- }
- void
- test_CS104_Connection_UseAfterClose(void)
- {
- CS104_Slave slave = NULL;
- CS104_Connection con = NULL;
- slave = CS104_Slave_create(100, 100);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- con = CS104_Connection_create("127.0.0.1", 20004);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_close(con);
- result = CS104_Connection_sendInterrogationCommand(con, CS101_COT_ACTIVATION, 1, IEC60870_QOI_STATION);
- TEST_ASSERT_FALSE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- }
- void
- test_CS104_Connection_UseAfterServerClosedConnection(void)
- {
- CS104_Slave slave = NULL;
- CS104_Connection con = NULL;
- slave = CS104_Slave_create(100, 100);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- con = CS104_Connection_create("127.0.0.1", 20004);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Slave_destroy(slave);
- /* wait to allow client side to detect connection loss */
- Thread_sleep(500);
- result = CS104_Connection_sendInterrogationCommand(con, CS101_COT_ACTIVATION, 1, IEC60870_QOI_STATION);
- TEST_ASSERT_FALSE(result);
- CS104_Connection_destroy(con);
- }
- static CS104_ConnectionEvent test_CS104_Connection_async_timeout_event;
- static void
- test_CS104_Connection_async_timeout_connectionHandler (void* parameter, CS104_Connection connection, CS104_ConnectionEvent event)
- {
- test_CS104_Connection_async_timeout_event = event;
- }
- void
- test_CS104_Connection_async_success(void)
- {
- test_CS104_Connection_async_timeout_event = CS104_CONNECTION_CLOSED;
- CS104_Slave slave = NULL;
- CS104_Connection con = NULL;
- slave = CS104_Slave_create(100, 100);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- con = CS104_Connection_create("127.0.0.1", 20004);
- TEST_ASSERT_NOT_NULL(con);
- CS104_APCIParameters apciParameters = CS104_Connection_getAPCIParameters(con);
- apciParameters->t0 = 1;
- CS104_Connection_setConnectionHandler(con, test_CS104_Connection_async_timeout_connectionHandler, NULL);
- CS104_Connection_connectAsync(con);
- Thread_sleep(500);
- TEST_ASSERT_EQUAL_INT(CS104_CONNECTION_OPENED, test_CS104_Connection_async_timeout_event);
- CS104_Connection_destroy(con);
- CS104_Slave_destroy(slave);
- }
- void
- test_CS104_Connection_async_timeout(void)
- {
- test_CS104_Connection_async_timeout_event = CS104_CONNECTION_CLOSED;
- CS104_Connection con = CS104_Connection_create("192.168.3.120", 2404);
- TEST_ASSERT_NOT_NULL(con);
- CS104_APCIParameters apciParameters = CS104_Connection_getAPCIParameters(con);
- apciParameters->t0 = 1;
- CS104_Connection_setConnectionHandler(con, test_CS104_Connection_async_timeout_connectionHandler, NULL);
- CS104_Connection_connectAsync(con);
- Thread_sleep(2000);
- TEST_ASSERT_EQUAL_INT(CS104_CONNECTION_FAILED, test_CS104_Connection_async_timeout_event);
- CS104_Connection_destroy(con);
- }
- void
- test_CS101_ASDU_addObjectOfWrongType(void)
- {
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- InformationObject io1 = (InformationObject) SinglePointInformation_create(NULL, 101, true, IEC60870_QUALITY_GOOD);
- bool added = CS101_ASDU_addInformationObject(asdu, io1);
- TEST_ASSERT_TRUE(added);
- InformationObject_destroy(io1);
- InformationObject io2 = (InformationObject) DoublePointInformation_create(NULL, 102, IEC60870_DOUBLE_POINT_OFF, IEC60870_QUALITY_GOOD);
- added = CS101_ASDU_addInformationObject(asdu, io2);
- TEST_ASSERT_FALSE(added);
- InformationObject_destroy(io2);
- CS101_ASDU_destroy(asdu);
- }
- void
- test_CS101_ASDU_addUntilOverflow(void)
- {
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- int i = 0;
- for (i = 0; i < 60; i++) {
- InformationObject io = (InformationObject) SinglePointInformation_create(NULL, 100 + i, true, IEC60870_QUALITY_GOOD);
- bool added = CS101_ASDU_addInformationObject(asdu, io);
- TEST_ASSERT_TRUE(added);
- InformationObject_destroy(io);
- TEST_ASSERT_EQUAL_INT(i + 1, CS101_ASDU_getNumberOfElements(asdu));
- }
- InformationObject io = (InformationObject) SinglePointInformation_create(NULL, 100 + i, true, IEC60870_QUALITY_GOOD);
- bool added = CS101_ASDU_addInformationObject(asdu, io);
- TEST_ASSERT_FALSE(added);
- InformationObject_destroy(io);
- CS101_ASDU_destroy(asdu);
- }
- void
- test_CS101_ASDU_clone(void)
- {
- CS101_ASDU asdu = CS101_ASDU_create(&defaultAppLayerParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
- int i = 0;
- for (i = 0; i < 60; i++) {
- InformationObject io = (InformationObject) SinglePointInformation_create(NULL, 100 + i, true, IEC60870_QUALITY_GOOD);
- bool added = CS101_ASDU_addInformationObject(asdu, io);
- TEST_ASSERT_TRUE(added);
- InformationObject_destroy(io);
- TEST_ASSERT_EQUAL_INT(i + 1, CS101_ASDU_getNumberOfElements(asdu));
- }
- CS101_ASDU clonedAsdu = CS101_ASDU_clone(asdu, NULL);
- TEST_ASSERT_NOT_NULL(clonedAsdu);
- TEST_ASSERT_EQUAL_INT(CS101_ASDU_getCA(asdu), CS101_ASDU_getCA(clonedAsdu));
- TEST_ASSERT_EQUAL_INT(CS101_ASDU_getOA(asdu), CS101_ASDU_getOA(clonedAsdu));
- TEST_ASSERT_EQUAL_INT(CS101_ASDU_getCOT(asdu), CS101_ASDU_getCOT(clonedAsdu));
- TEST_ASSERT_EQUAL_INT(CS101_ASDU_getTypeID(asdu), CS101_ASDU_getTypeID(clonedAsdu));
- TEST_ASSERT_EQUAL_INT(CS101_ASDU_getNumberOfElements(asdu), CS101_ASDU_getNumberOfElements(clonedAsdu));
- TEST_ASSERT_EQUAL_INT(CS101_ASDU_getPayloadSize(asdu), CS101_ASDU_getPayloadSize(clonedAsdu));
- TEST_ASSERT_EQUAL_INT(0, memcmp(CS101_ASDU_getPayload(asdu), CS101_ASDU_getPayload(clonedAsdu), CS101_ASDU_getPayloadSize(clonedAsdu)));
- CS101_ASDU_destroy(asdu);
- CS101_ASDU_destroy(clonedAsdu);
- }
- #if (CONFIG_CS104_SUPPORT_TLS == 1)
- struct secEventInfo {
- int eventHandlerCalled;
- int eventCodes[100];
- };
- static void
- securityEventHandler(void* parameter, TLSEventLevel eventLevel, int eventCode, const char* msg, TLSConnection con)
- {
- struct secEventInfo* eventInfo = (struct secEventInfo*)parameter;
- char peerAddrBuf[60];
- char* peerAddr = NULL;
- const char* tlsVersion = "unknown";
- if (con) {
- peerAddr = TLSConnection_getPeerAddress(con, peerAddrBuf);
- tlsVersion = TLSConfigVersion_toString(TLSConnection_getTLSVersion(con));
- }
- printf("[SECURITY EVENT] %s (t: %i, c: %i, version: %s remote-ip: %s)\n", msg, eventLevel, eventCode, tlsVersion, peerAddr);
- if (eventInfo) {
- eventInfo->eventCodes[eventInfo->eventHandlerCalled] = eventCode;
- eventInfo->eventHandlerCalled++;
- }
- }
- void
- test_CS104_MasterSlave_TLSConnectSuccess(void)
- {
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, NULL);
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);
- TLSConfiguration_setAllowOnlyKnownCertificates(tlsConfig2, true);
- /* use valid certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addAllowedCertificateFromFile(tlsConfig2, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- }
- void
- test_CS104_MasterSlave_TLSConnectSuccessWithoutSeparateCACert(void)
- {
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, NULL);
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1_chain.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig1, "server_CA1_1_chain.pem");
- TEST_ASSERT_TRUE(res);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);
- TLSConfiguration_setAllowOnlyKnownCertificates(tlsConfig2, true);
- /* use expired certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addAllowedCertificateFromFile(tlsConfig2, "server_CA1_1_chain.pem");
- TEST_ASSERT_TRUE(res);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- }
- void
- test_CS104_MasterSlave_TLSConnectFails(void)
- {
- struct secEventInfo eventInfo;
- memset(&eventInfo, 0, sizeof(struct secEventInfo));
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, &eventInfo);
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);
- TLSConfiguration_setAllowOnlyKnownCertificates(tlsConfig2, true);
- /* use valid certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addAllowedCertificateFromFile(tlsConfig2, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_FALSE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- TEST_ASSERT_EQUAL_INT(1, eventInfo.eventHandlerCalled);
- TEST_ASSERT_EQUAL_INT(TLS_EVENT_CODE_ALM_ALGO_NOT_SUPPORTED, eventInfo.eventCodes[0]);
- }
- void
- test_CS104_MasterSlave_TLSVersionMismatch(void)
- {
- struct secEventInfo eventInfo;
- memset(&eventInfo, 0, sizeof(struct secEventInfo));
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setMinTlsVersion(tlsConfig1, TLS_VERSION_TLS_1_2);
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, &eventInfo);
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);
- TLSConfiguration_setAllowOnlyKnownCertificates(tlsConfig2, true);
- TLSConfiguration_setMinTlsVersion(tlsConfig2, TLS_VERSION_TLS_1_1);
- TLSConfiguration_setMaxTlsVersion(tlsConfig2, TLS_VERSION_TLS_1_1);
- /* use valid certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addAllowedCertificateFromFile(tlsConfig2, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_FALSE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- TEST_ASSERT_EQUAL_INT(1, eventInfo.eventHandlerCalled);
- TEST_ASSERT_EQUAL_INT(TLS_EVENT_CODE_ALM_UNSECURE_COMMUNICATION, eventInfo.eventCodes[0]);
- }
- void
- test_CS104_MasterSlave_TLSCertificateExpired(void)
- {
- struct secEventInfo eventInfo;
- memset(&eventInfo, 0, sizeof(struct secEventInfo));
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, &eventInfo);
- TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TLSConfiguration_setMinTlsVersion(tlsConfig1, TLS_VERSION_TLS_1_2);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);;
- /* use expired certificate */
- TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_1.key", NULL);
- TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_1.pem");
- TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TLSConfiguration_setMinTlsVersion(tlsConfig2, TLS_VERSION_TLS_1_2);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_FALSE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- TEST_ASSERT_EQUAL_INT(2, eventInfo.eventHandlerCalled);
- TEST_ASSERT_EQUAL_INT(TLS_EVENT_CODE_ALM_CERT_EXPIRED, eventInfo.eventCodes[0]);
- TEST_ASSERT_EQUAL_INT(TLS_EVENT_CODE_ALM_CERT_VALIDATION_FAILED, eventInfo.eventCodes[1]);
- }
- void
- test_CS104_MasterSlave_TLSCertificateRevoked(void)
- {
- struct secEventInfo eventInfo;
- memset(&eventInfo, 0, sizeof(struct secEventInfo));
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, &eventInfo);
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCRLFromFile(tlsConfig1, "test.crl");
- TEST_ASSERT_TRUE(res);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);;
- /* use revoked certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_FALSE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- TEST_ASSERT_EQUAL_INT(2, eventInfo.eventHandlerCalled);
- TEST_ASSERT_EQUAL_INT(TLS_EVENT_CODE_ALM_CERT_REVOKED, eventInfo.eventCodes[0]);
- TEST_ASSERT_EQUAL_INT(TLS_EVENT_CODE_ALM_CERT_VALIDATION_FAILED, eventInfo.eventCodes[1]);
- }
- void
- test_CS104_MasterSlave_TLSRenegotiateAfterCRLUpdate(void)
- {
- struct secEventInfo eventInfo;
- memset(&eventInfo, 0, sizeof(struct secEventInfo));
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, &eventInfo);
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- // res = TLSConfiguration_addCRLFromFile(tlsConfig1, "test.crl");
- // TEST_ASSERT_TRUE(res);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);;
- /* use revoked certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- TLSConfiguration_setRenegotiationTime(tlsConfig1, 10000);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- res = TLSConfiguration_addCRLFromFile(tlsConfig1, "test.crl");
- TEST_ASSERT_TRUE(res);
- CS101_ASDU newAsdu = CS101_ASDU_create(CS104_Slave_getAppLayerParameters(slave), false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, 1, IEC60870_QUALITY_GOOD);
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- Thread_sleep(1000);
- TEST_ASSERT_EQUAL_INT(1, eventInfo.eventHandlerCalled);
- TEST_ASSERT_EQUAL_INT(TLS_EVENT_CODE_INF_SESSION_RENEGOTIATION, eventInfo.eventCodes[0]);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- }
- void
- test_CS104_MasterSlave_TLSCertificateRevokedBeforeRenegotiation(void)
- {
- struct secEventInfo eventInfo;
- memset(&eventInfo, 0, sizeof(struct secEventInfo));
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, &eventInfo);
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- TLSConfiguration_setRenegotiationTime(tlsConfig1, 1000);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);;
- /* use revoked certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- /* update CRL -> expect renegotiation to fail! */
- res = TLSConfiguration_addCRLFromFile(tlsConfig1, "test.crl");
- TEST_ASSERT_TRUE(res);
- Thread_sleep(1500);
- CS101_ASDU newAsdu = CS101_ASDU_create(CS104_Slave_getAppLayerParameters(slave), false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, 1, IEC60870_QUALITY_GOOD);
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- Thread_sleep(1500);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- TEST_ASSERT_TRUE(eventInfo.eventHandlerCalled > 0);
- TEST_ASSERT_EQUAL_INT(TLS_EVENT_CODE_INF_SESSION_RENEGOTIATION, eventInfo.eventCodes[0]);
- }
- void
- test_CS104_MasterSlave_TLSCertificateRevokedBeforeReconnect(void)
- {
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_enableSessionResumption(tlsConfig1, false);
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, NULL);
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- TLSConfiguration_setRenegotiationTime(tlsConfig1, 1000);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);;
- /* use revoked certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_close(con);
- /* update CRL -> expect renegotiation to fail! */
- res = TLSConfiguration_addCRLFromFile(tlsConfig1, "test.crl");
- TEST_ASSERT_TRUE(res);
- result = CS104_Connection_connect(con);
- TEST_ASSERT_FALSE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- }
- void
- test_CS104_MasterSlave_TLSUnknownCertificate(void)
- {
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setAllowOnlyKnownCertificates(tlsConfig1, true);
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, NULL);
- TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TLSConfiguration_addAllowedCertificateFromFile(tlsConfig1, "client_CA1_3.pem");
- TLSConfiguration_setMinTlsVersion(tlsConfig1, TLS_VERSION_TLS_1_2);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig2, true);;
- /* use expired certificate */
- TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_4.key", NULL);
- TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_4.pem");
- TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TLSConfiguration_setMinTlsVersion(tlsConfig2, TLS_VERSION_TLS_1_2);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_FALSE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- }
- void
- test_CS104_MasterSlave_TLSUseSessionResumption(void)
- {
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_enableSessionResumption(tlsConfig1, true);
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_enableSessionResumption(tlsConfig2, true);
- TLSConfiguration_setChainValidation(tlsConfig2, true);
- TLSConfiguration_setAllowOnlyKnownCertificates(tlsConfig2, true);
- /* use valid certificate */
- TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TLSConfiguration_addAllowedCertificateFromFile(tlsConfig2, "server_CA1_1.pem");
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_destroy(con);
- printf("New connection should use the old TLS session\n");
- con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- }
- void
- test_CS104_MasterSlave_TLSCertificateSessionResumptionExpiredAtClient(void)
- {
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, NULL);
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- TLSConfiguration_setRenegotiationTime(tlsConfig1, 1000);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_enableSessionResumption(tlsConfig2, true);
- TLSConfiguration_setSessionResumptionInterval(tlsConfig2, 1);
- TLSConfiguration_setChainValidation(tlsConfig2, true);
- /* use revoked certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_close(con);
- Thread_sleep(1500);
- /* update CRL -> expect renegotiation to fail! */
- res = TLSConfiguration_addCRLFromFile(tlsConfig1, "test.crl");
- TEST_ASSERT_TRUE(res);
- result = CS104_Connection_connect(con);
- TEST_ASSERT_FALSE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- }
- void
- test_CS104_MasterSlave_TLSCertificateSessionResumptionExpiredAtServer(void)
- {
- bool res = false;
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_enableSessionResumption(tlsConfig1, true);
- TLSConfiguration_setSessionResumptionInterval(tlsConfig1, 1);
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setEventHandler(tlsConfig1, securityEventHandler, NULL);
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- TLSConfiguration_setRenegotiationTime(tlsConfig1, 1000);
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_enableSessionResumption(tlsConfig2, true);
- TLSConfiguration_setChainValidation(tlsConfig2, true);
- /* use revoked certificate */
- res = TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TEST_ASSERT_TRUE(res);
- res = TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TEST_ASSERT_TRUE(res);
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_close(con);
- Thread_sleep(2000);
- /* update CRL -> expect renegotiation to fail! */
- res = TLSConfiguration_addCRLFromFile(tlsConfig1, "test.crl");
- TEST_ASSERT_TRUE(res);
- result = CS104_Connection_connect(con);
- TEST_ASSERT_FALSE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- }
- void
- test_CS104_MasterSlave_TLSReuseConfigurationWithSessionResumption(void)
- {
- TLSConfiguration tlsConfig1 = TLSConfiguration_create();
- TLSConfiguration_enableSessionResumption(tlsConfig1, true);
- TLSConfiguration_setChainValidation(tlsConfig1, true);
- TLSConfiguration_setOwnKeyFromFile(tlsConfig1, "server_CA1_1.key", NULL);
- TLSConfiguration_setOwnCertificateFromFile(tlsConfig1, "server_CA1_1.pem");
- TLSConfiguration_addCACertificateFromFile(tlsConfig1, "root_CA1.pem");
- TLSConfiguration tlsConfig2 = TLSConfiguration_create();
- TLSConfiguration_enableSessionResumption(tlsConfig2, true);
- TLSConfiguration_setChainValidation(tlsConfig2, true);
- TLSConfiguration_setAllowOnlyKnownCertificates(tlsConfig2, true);
- /* use valid certificate */
- TLSConfiguration_setOwnKeyFromFile(tlsConfig2, "client_CA1_3.key", NULL);
- TLSConfiguration_setOwnCertificateFromFile(tlsConfig2, "client_CA1_3.pem");
- TLSConfiguration_addCACertificateFromFile(tlsConfig2, "root_CA1.pem");
- TLSConfiguration_addAllowedCertificateFromFile(tlsConfig2, "server_CA1_1.pem");
- CS104_Slave slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS104_Connection con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_destroy(con);
- con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- slave = CS104_Slave_createSecure(100, 100, tlsConfig1);
- TEST_ASSERT_NOT_NULL(slave);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- con = CS104_Connection_createSecure("127.0.0.1", 20004, tlsConfig2);
- TEST_ASSERT_NOT_NULL(con);
- result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- Thread_sleep(500);
- CS104_Slave_destroy(slave);
- CS104_Connection_destroy(con);
- TLSConfiguration_destroy(tlsConfig1);
- TLSConfiguration_destroy(tlsConfig2);
- }
- #endif /* #if (CONFIG_CS104_SUPPORT_TLS == 1) */
- void
- test_ASDUsetGetNumberOfElements(void)
- {
- struct sCS101_AppLayerParameters salParameters;
- salParameters.maxSizeOfASDU = 100;
- salParameters.originatorAddress = 0;
- salParameters.sizeOfCA = 2;
- salParameters.sizeOfCOT = 2;
- salParameters.sizeOfIOA = 3;
- salParameters.sizeOfTypeId = 1;
- salParameters.sizeOfVSQ = 1;
- CS101_ASDU asdu = CS101_ASDU_create(&salParameters, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- TEST_ASSERT_FALSE(CS101_ASDU_isSequence(asdu));
- CS101_ASDU_setNumberOfElements(asdu, 127);
- TEST_ASSERT_EQUAL_INT(127, CS101_ASDU_getNumberOfElements(asdu));
- CS101_ASDU_setNumberOfElements(asdu, 5);
- TEST_ASSERT_EQUAL_INT(5, CS101_ASDU_getNumberOfElements(asdu));
- TEST_ASSERT_FALSE(CS101_ASDU_isSequence(asdu));
- CS101_ASDU_setSequence(asdu, true);
- CS101_ASDU_setNumberOfElements(asdu, 127);
- TEST_ASSERT_EQUAL_INT(127, CS101_ASDU_getNumberOfElements(asdu));
- CS101_ASDU_setNumberOfElements(asdu, 5);
- TEST_ASSERT_EQUAL_INT(5, CS101_ASDU_getNumberOfElements(asdu));
- TEST_ASSERT_TRUE(CS101_ASDU_isSequence(asdu));
- CS101_ASDU_destroy(asdu);
- }
- static uint8_t STARTDT_ACT_MSG[] = { 0x68, 0x04, 0x07, 0x00, 0x00, 0x00 };
- static uint8_t STOPDT_ACT_MSG[] = { 0x68, 0x04, 0x13, 0x00, 0x00, 0x00 };
- void
- test_CS104SlaveUnconfirmedStoppedMode()
- {
- CS104_Slave slave = CS104_Slave_create(10, 10);
- CS104_Slave_setServerMode(slave, CS104_MODE_SINGLE_REDUNDANCY_GROUP);
- CS104_Slave_setLocalPort(slave, 20004);
- CS104_Slave_start(slave);
- CS101_AppLayerParameters alParams = CS104_Slave_getAppLayerParameters(slave);
- struct stest_CS104SlaveEventQueue1 info;
- info.asduHandlerCalled = 0;
- info.spontCount = 0;
- info.lastScaledValue = 0;
- int16_t scaledValue = 0;
- for (int i = 0; i < 15; i++) {
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, scaledValue, IEC60870_QUALITY_GOOD);
- scaledValue++;
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- }
- CS104_Connection con = CS104_Connection_create("127.0.0.1", 20004);
- CS104_Connection_setASDUReceivedHandler(con, test_CS104SlaveEventQueue1_asduReceivedHandler, &info);
- bool result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- Thread_sleep(500);
- CS104_Connection_sendStopDT(con);
- CS104_Connection_close(con);
- TEST_ASSERT_EQUAL_INT(14, info.lastScaledValue);
- info.asduHandlerCalled = 0;
- info.spontCount = 0;
- result = CS104_Connection_connect(con);
- TEST_ASSERT_TRUE(result);
- CS104_Connection_sendStartDT(con);
- for (int i = 0; i < 6; i++)
- {
- Thread_sleep(10);
- CS101_ASDU newAsdu = CS101_ASDU_create(alParams, false, CS101_COT_SPONTANEOUS, 0, 1, false, false);
- InformationObject io = (InformationObject) MeasuredValueScaled_create(NULL, 110, scaledValue, IEC60870_QUALITY_GOOD);
- scaledValue++;
- CS101_ASDU_addInformationObject(newAsdu, io);
- InformationObject_destroy(io);
- CS104_Slave_enqueueASDU(slave, newAsdu);
- CS101_ASDU_destroy(newAsdu);
- }
- Thread_sleep(500);
- TEST_ASSERT_EQUAL_INT(6, CS104_Connection_sendMessage(con, STOPDT_ACT_MSG, sizeof(STOPDT_ACT_MSG)));
- Thread_sleep(5000);
- CS104_Connection_close(con);
- TEST_ASSERT_EQUAL_INT(6, info.asduHandlerCalled);
- TEST_ASSERT_EQUAL_INT(6, info.spontCount);
- TEST_ASSERT_EQUAL_INT(20, info.lastScaledValue);
- CS104_Connection_destroy(con);
- CS104_Slave_destroy(slave);
- }
- int
- main(int argc, char** argv)
- {
- UNITY_BEGIN();
- RUN_TEST(test_version_number);
- RUN_TEST(test_CS104_Slave_CreateDestroy);
- RUN_TEST(test_CS104_MasterSlave_CreateDestroyLoop);
- RUN_TEST(test_CS104_Connection_CreateDestroy);
- RUN_TEST(test_CS104_MasterSlave_CreateDestroy);
- RUN_TEST(test_CP56Time2a);
- RUN_TEST(test_CP56Time2aToMsTimestamp);
- RUN_TEST(test_CP56Time2aConversionFunctions);
- RUN_TEST(test_StepPositionInformation);
- RUN_TEST(test_addMaxNumberOfIOsToASDU);
- RUN_TEST(test_SingleEventType);
- RUN_TEST(test_SinglePointInformation);
- RUN_TEST(test_SinglePointWithCP24Time2a);
- RUN_TEST(test_SinglePointWithCP56Time2a);
- RUN_TEST(test_DoublePointInformation);
- RUN_TEST(test_DoublePointWithCP24Time2a);
- RUN_TEST(test_DoublePointWithCP56Time2a);
- RUN_TEST(test_NormalizeMeasureValueWithoutQuality);
- RUN_TEST(test_NormalizeMeasureValue);
- RUN_TEST(test_MeasuredValueNormalizedWithCP24Time2a);
- RUN_TEST(test_MeasuredValueNormalizedWithCP56Time2a);
- RUN_TEST(test_MeasuredValueScaled);
- RUN_TEST(test_MeasuredValueScaledWithCP24Time2a);
- RUN_TEST(test_MeasuredValueScaledWithCP56Time2a);
- RUN_TEST(test_MeasuredValueShort);
- RUN_TEST(test_MeasuredValueShortWithCP24Time2a);
- RUN_TEST(test_MeasuredValueShortWithCP56Time2a);
- RUN_TEST(test_StepPositionInformation);
- RUN_TEST(test_StepPositionWithCP24Time2a);
- RUN_TEST(test_StepPositionWithCP56Time2a);
- RUN_TEST(test_IntegratedTotals);
- RUN_TEST(test_IntegratedTotalsWithCP24Time2a);
- RUN_TEST(test_IntegratedTotalsWithCP56Time2a);
- RUN_TEST(test_SingleCommand);
- RUN_TEST(test_SingleCommandWithCP56Time2a);
- RUN_TEST(test_DoubleCommand);
- RUN_TEST(test_DoubleCommandWithCP56Time2a);
- RUN_TEST(test_StepCommandValue);
- RUN_TEST(test_StepCommandWithCP56Time2a);
- RUN_TEST(test_SetpointCommandNormalized);
- RUN_TEST(test_SetpointCommandNormalizedWithCP56Time2a);
- RUN_TEST(test_SetpointCommandScaled);
- RUN_TEST(test_SetpointCommandScaledWithCP56Time2a);
- RUN_TEST(test_SetpointCommandShort);
- RUN_TEST(test_SetpointCommandShortWithCP56Time2a);
- RUN_TEST(test_InterrogationCommand);
- RUN_TEST(test_CounterInterrogationCommand);
- RUN_TEST(test_ReadCommand);
- RUN_TEST(test_ClockSynchronizationCommand);
- RUN_TEST(test_ResetProcessCommand);
- RUN_TEST(test_DelayAcquisitionCommand);
- RUN_TEST(test_BitString32);
- RUN_TEST(test_Bitstring32CommandWithCP56Time2a);
- RUN_TEST(test_QueryLog);
- RUN_TEST(test_BitString32xx_encodeDecode);
- RUN_TEST(test_EventOfProtectionEquipmentWithTime);
- RUN_TEST(test_IpAddressHandling);
- RUN_TEST(test_CS104SlaveConnectionIsRedundancyGroup);
- RUN_TEST(test_CS104SlaveSingleRedundancyGroup);
- RUN_TEST(test_CS104SlaveSingleRedundancyGroupMultipleConnections);
- RUN_TEST(test_CS104SlaveEventQueue1);
- RUN_TEST(test_CS104SlaveEventQueueOverflow);
- RUN_TEST(test_CS104SlaveEventQueueOverflow2);
- RUN_TEST(test_CS104SlaveEventQueueCheckCapacity);
- RUN_TEST(test_CS104SlaveEventQueueOverflow3);
- RUN_TEST(test_CS104_Connection_ConnectTimeout);
- RUN_TEST(test_CS104_Connection_UseAfterClose);
- RUN_TEST(test_CS104_Connection_UseAfterServerClosedConnection);
- RUN_TEST(test_CS104_Connection_async_success);
- RUN_TEST(test_CS104_Connection_async_timeout);
- RUN_TEST(test_CS101_ASDU_addObjectOfWrongType);
- RUN_TEST(test_CS101_ASDU_addUntilOverflow);
- #if (CONFIG_CS104_SUPPORT_TLS == 1)
- RUN_TEST(test_CS104_MasterSlave_TLSConnectSuccess);
- RUN_TEST(test_CS104_MasterSlave_TLSConnectSuccessWithoutSeparateCACert);
- RUN_TEST(test_CS104_MasterSlave_TLSConnectFails);
- RUN_TEST(test_CS104_MasterSlave_TLSVersionMismatch);
- RUN_TEST(test_CS104_MasterSlave_TLSCertificateExpired);
- RUN_TEST(test_CS104_MasterSlave_TLSCertificateRevoked);
- RUN_TEST(test_CS104_MasterSlave_TLSRenegotiateAfterCRLUpdate);
- RUN_TEST(test_CS104_MasterSlave_TLSCertificateRevokedBeforeRenegotiation);
- RUN_TEST(test_CS104_MasterSlave_TLSCertificateRevokedBeforeReconnect);
- RUN_TEST(test_CS104_MasterSlave_TLSUnknownCertificate);
- RUN_TEST(test_CS104_MasterSlave_TLSUseSessionResumption);
- RUN_TEST(test_CS104_MasterSlave_TLSCertificateSessionResumptionExpiredAtClient);
- RUN_TEST(test_CS104_MasterSlave_TLSCertificateSessionResumptionExpiredAtServer);
- RUN_TEST(test_CS104_MasterSlave_TLSReuseConfigurationWithSessionResumption);
- #endif /* #if (CONFIG_CS104_SUPPORT_TLS == 1) */
- RUN_TEST(test_ASDUsetGetNumberOfElements);
- RUN_TEST(test_CS101_ASDU_clone);
- RUN_TEST(test_CS104SlaveUnconfirmedStoppedMode);
- return UNITY_END();
- }
|