write_spec_test.json 113 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617
  1. {
  2. "Two sequential writes to different documents smoke test.": {
  3. "describeName": "Writes:",
  4. "itName": "Two sequential writes to different documents smoke test.",
  5. "tags": [],
  6. "config": {
  7. "useGarbageCollection": true
  8. },
  9. "steps": [
  10. {
  11. "userListen": [
  12. 2,
  13. {
  14. "path": "collection",
  15. "filters": [],
  16. "orderBys": []
  17. }
  18. ],
  19. "stateExpect": {
  20. "activeTargets": {
  21. "2": {
  22. "query": {
  23. "path": "collection",
  24. "filters": [],
  25. "orderBys": []
  26. },
  27. "resumeToken": ""
  28. }
  29. }
  30. }
  31. },
  32. {
  33. "watchAck": [
  34. 2
  35. ]
  36. },
  37. {
  38. "watchEntity": {
  39. "docs": [
  40. [
  41. "collection/a",
  42. 1000,
  43. {
  44. "v": 1
  45. }
  46. ],
  47. [
  48. "collection/b",
  49. 500,
  50. {
  51. "v": 1
  52. }
  53. ]
  54. ],
  55. "targets": [
  56. 2
  57. ]
  58. }
  59. },
  60. {
  61. "watchCurrent": [
  62. [
  63. 2
  64. ],
  65. "resume-token-1000"
  66. ],
  67. "watchSnapshot": 1000,
  68. "expect": [
  69. {
  70. "query": {
  71. "path": "collection",
  72. "filters": [],
  73. "orderBys": []
  74. },
  75. "added": [
  76. [
  77. "collection/a",
  78. 1000,
  79. {
  80. "v": 1
  81. }
  82. ],
  83. [
  84. "collection/b",
  85. 500,
  86. {
  87. "v": 1
  88. }
  89. ]
  90. ],
  91. "errorCode": 0,
  92. "fromCache": false,
  93. "hasPendingWrites": false
  94. }
  95. ]
  96. },
  97. {
  98. "userSet": [
  99. "collection/a",
  100. {
  101. "v": 2
  102. }
  103. ],
  104. "expect": [
  105. {
  106. "query": {
  107. "path": "collection",
  108. "filters": [],
  109. "orderBys": []
  110. },
  111. "modified": [
  112. [
  113. "collection/a",
  114. 1000,
  115. {
  116. "v": 2
  117. },
  118. "local"
  119. ]
  120. ],
  121. "errorCode": 0,
  122. "fromCache": false,
  123. "hasPendingWrites": true
  124. }
  125. ]
  126. },
  127. {
  128. "watchEntity": {
  129. "docs": [
  130. [
  131. "collection/a",
  132. 2000,
  133. {
  134. "v": 2
  135. }
  136. ]
  137. ],
  138. "targets": [
  139. 2
  140. ]
  141. },
  142. "watchSnapshot": 2000
  143. },
  144. {
  145. "writeAck": {
  146. "version": 2000,
  147. "expectUserCallback": true
  148. },
  149. "expect": [
  150. {
  151. "query": {
  152. "path": "collection",
  153. "filters": [],
  154. "orderBys": []
  155. },
  156. "metadata": [
  157. [
  158. "collection/a",
  159. 2000,
  160. {
  161. "v": 2
  162. }
  163. ]
  164. ],
  165. "errorCode": 0,
  166. "fromCache": false,
  167. "hasPendingWrites": false
  168. }
  169. ]
  170. },
  171. {
  172. "userSet": [
  173. "collection/b",
  174. {
  175. "v": 2
  176. }
  177. ],
  178. "expect": [
  179. {
  180. "query": {
  181. "path": "collection",
  182. "filters": [],
  183. "orderBys": []
  184. },
  185. "modified": [
  186. [
  187. "collection/b",
  188. 500,
  189. {
  190. "v": 2
  191. },
  192. "local"
  193. ]
  194. ],
  195. "errorCode": 0,
  196. "fromCache": false,
  197. "hasPendingWrites": true
  198. }
  199. ]
  200. },
  201. {
  202. "watchEntity": {
  203. "docs": [
  204. [
  205. "collection/b",
  206. 2500,
  207. {
  208. "v": 2
  209. }
  210. ]
  211. ],
  212. "targets": [
  213. 2
  214. ]
  215. },
  216. "watchSnapshot": 3000
  217. },
  218. {
  219. "writeAck": {
  220. "version": 3000,
  221. "expectUserCallback": true
  222. },
  223. "expect": [
  224. {
  225. "query": {
  226. "path": "collection",
  227. "filters": [],
  228. "orderBys": []
  229. },
  230. "metadata": [
  231. [
  232. "collection/b",
  233. 2500,
  234. {
  235. "v": 2
  236. }
  237. ]
  238. ],
  239. "errorCode": 0,
  240. "fromCache": false,
  241. "hasPendingWrites": false
  242. }
  243. ]
  244. }
  245. ]
  246. },
  247. "Event is raised for a local set before and after the write ack": {
  248. "describeName": "Writes:",
  249. "itName": "Event is raised for a local set before and after the write ack",
  250. "tags": [],
  251. "config": {
  252. "useGarbageCollection": true
  253. },
  254. "steps": [
  255. {
  256. "userListen": [
  257. 2,
  258. {
  259. "path": "collection/key",
  260. "filters": [],
  261. "orderBys": []
  262. }
  263. ],
  264. "stateExpect": {
  265. "activeTargets": {
  266. "2": {
  267. "query": {
  268. "path": "collection/key",
  269. "filters": [],
  270. "orderBys": []
  271. },
  272. "resumeToken": ""
  273. }
  274. }
  275. }
  276. },
  277. {
  278. "watchAck": [
  279. 2
  280. ]
  281. },
  282. {
  283. "watchEntity": {
  284. "docs": [
  285. [
  286. "collection/key",
  287. 1000,
  288. {
  289. "v": 1
  290. }
  291. ]
  292. ],
  293. "targets": [
  294. 2
  295. ]
  296. }
  297. },
  298. {
  299. "watchCurrent": [
  300. [
  301. 2
  302. ],
  303. "resume-token-1000"
  304. ],
  305. "watchSnapshot": 1000,
  306. "expect": [
  307. {
  308. "query": {
  309. "path": "collection/key",
  310. "filters": [],
  311. "orderBys": []
  312. },
  313. "added": [
  314. [
  315. "collection/key",
  316. 1000,
  317. {
  318. "v": 1
  319. }
  320. ]
  321. ],
  322. "errorCode": 0,
  323. "fromCache": false,
  324. "hasPendingWrites": false
  325. }
  326. ]
  327. },
  328. {
  329. "userSet": [
  330. "collection/key",
  331. {
  332. "v": 2
  333. }
  334. ],
  335. "expect": [
  336. {
  337. "query": {
  338. "path": "collection/key",
  339. "filters": [],
  340. "orderBys": []
  341. },
  342. "modified": [
  343. [
  344. "collection/key",
  345. 1000,
  346. {
  347. "v": 2
  348. },
  349. "local"
  350. ]
  351. ],
  352. "errorCode": 0,
  353. "fromCache": false,
  354. "hasPendingWrites": true
  355. }
  356. ]
  357. },
  358. {
  359. "watchEntity": {
  360. "docs": [
  361. [
  362. "collection/key",
  363. 2000,
  364. {
  365. "v": 2
  366. }
  367. ]
  368. ],
  369. "targets": [
  370. 2
  371. ]
  372. },
  373. "watchSnapshot": 2000
  374. },
  375. {
  376. "writeAck": {
  377. "version": 2000,
  378. "expectUserCallback": true
  379. },
  380. "expect": [
  381. {
  382. "query": {
  383. "path": "collection/key",
  384. "filters": [],
  385. "orderBys": []
  386. },
  387. "metadata": [
  388. [
  389. "collection/key",
  390. 2000,
  391. {
  392. "v": 2
  393. }
  394. ]
  395. ],
  396. "errorCode": 0,
  397. "fromCache": false,
  398. "hasPendingWrites": false
  399. }
  400. ]
  401. }
  402. ]
  403. },
  404. "Cache will not keep data for an outdated write ack": {
  405. "describeName": "Writes:",
  406. "itName": "Cache will not keep data for an outdated write ack",
  407. "tags": [],
  408. "config": {
  409. "useGarbageCollection": true
  410. },
  411. "steps": [
  412. {
  413. "userListen": [
  414. 2,
  415. {
  416. "path": "collection/key",
  417. "filters": [],
  418. "orderBys": []
  419. }
  420. ],
  421. "stateExpect": {
  422. "activeTargets": {
  423. "2": {
  424. "query": {
  425. "path": "collection/key",
  426. "filters": [],
  427. "orderBys": []
  428. },
  429. "resumeToken": ""
  430. }
  431. }
  432. }
  433. },
  434. {
  435. "watchAck": [
  436. 2
  437. ]
  438. },
  439. {
  440. "watchEntity": {
  441. "docs": [
  442. [
  443. "collection/key",
  444. 1000,
  445. {
  446. "v": 1
  447. }
  448. ]
  449. ],
  450. "targets": [
  451. 2
  452. ]
  453. }
  454. },
  455. {
  456. "watchCurrent": [
  457. [
  458. 2
  459. ],
  460. "resume-token-1000"
  461. ],
  462. "watchSnapshot": 1000,
  463. "expect": [
  464. {
  465. "query": {
  466. "path": "collection/key",
  467. "filters": [],
  468. "orderBys": []
  469. },
  470. "added": [
  471. [
  472. "collection/key",
  473. 1000,
  474. {
  475. "v": 1
  476. }
  477. ]
  478. ],
  479. "errorCode": 0,
  480. "fromCache": false,
  481. "hasPendingWrites": false
  482. }
  483. ]
  484. },
  485. {
  486. "userSet": [
  487. "collection/key",
  488. {
  489. "v": 2
  490. }
  491. ],
  492. "expect": [
  493. {
  494. "query": {
  495. "path": "collection/key",
  496. "filters": [],
  497. "orderBys": []
  498. },
  499. "modified": [
  500. [
  501. "collection/key",
  502. 1000,
  503. {
  504. "v": 2
  505. },
  506. "local"
  507. ]
  508. ],
  509. "errorCode": 0,
  510. "fromCache": false,
  511. "hasPendingWrites": true
  512. }
  513. ]
  514. },
  515. {
  516. "watchEntity": {
  517. "docs": [
  518. [
  519. "collection/key",
  520. 10000,
  521. {
  522. "v": 3
  523. }
  524. ]
  525. ],
  526. "targets": [
  527. 2
  528. ]
  529. },
  530. "watchSnapshot": 10000
  531. },
  532. {
  533. "writeAck": {
  534. "version": 2000,
  535. "expectUserCallback": true
  536. },
  537. "expect": [
  538. {
  539. "query": {
  540. "path": "collection/key",
  541. "filters": [],
  542. "orderBys": []
  543. },
  544. "modified": [
  545. [
  546. "collection/key",
  547. 10000,
  548. {
  549. "v": 3
  550. }
  551. ]
  552. ],
  553. "errorCode": 0,
  554. "fromCache": false,
  555. "hasPendingWrites": false
  556. }
  557. ]
  558. }
  559. ]
  560. },
  561. "Cache raises correct event if write is acked before watch delivers it": {
  562. "describeName": "Writes:",
  563. "itName": "Cache raises correct event if write is acked before watch delivers it",
  564. "tags": [],
  565. "config": {
  566. "useGarbageCollection": true
  567. },
  568. "steps": [
  569. {
  570. "userListen": [
  571. 2,
  572. {
  573. "path": "collection/key",
  574. "filters": [],
  575. "orderBys": []
  576. }
  577. ],
  578. "stateExpect": {
  579. "activeTargets": {
  580. "2": {
  581. "query": {
  582. "path": "collection/key",
  583. "filters": [],
  584. "orderBys": []
  585. },
  586. "resumeToken": ""
  587. }
  588. }
  589. }
  590. },
  591. {
  592. "watchAck": [
  593. 2
  594. ]
  595. },
  596. {
  597. "watchEntity": {
  598. "docs": [
  599. [
  600. "collection/key",
  601. 1000,
  602. {
  603. "v": 1
  604. }
  605. ]
  606. ],
  607. "targets": [
  608. 2
  609. ]
  610. }
  611. },
  612. {
  613. "watchCurrent": [
  614. [
  615. 2
  616. ],
  617. "resume-token-1000"
  618. ],
  619. "watchSnapshot": 1000,
  620. "expect": [
  621. {
  622. "query": {
  623. "path": "collection/key",
  624. "filters": [],
  625. "orderBys": []
  626. },
  627. "added": [
  628. [
  629. "collection/key",
  630. 1000,
  631. {
  632. "v": 1
  633. }
  634. ]
  635. ],
  636. "errorCode": 0,
  637. "fromCache": false,
  638. "hasPendingWrites": false
  639. }
  640. ]
  641. },
  642. {
  643. "userSet": [
  644. "collection/key",
  645. {
  646. "v": 2
  647. }
  648. ],
  649. "expect": [
  650. {
  651. "query": {
  652. "path": "collection/key",
  653. "filters": [],
  654. "orderBys": []
  655. },
  656. "modified": [
  657. [
  658. "collection/key",
  659. 1000,
  660. {
  661. "v": 2
  662. },
  663. "local"
  664. ]
  665. ],
  666. "errorCode": 0,
  667. "fromCache": false,
  668. "hasPendingWrites": true
  669. }
  670. ]
  671. },
  672. {
  673. "writeAck": {
  674. "version": 2000,
  675. "expectUserCallback": true
  676. }
  677. },
  678. {
  679. "watchEntity": {
  680. "docs": [
  681. [
  682. "collection/key",
  683. 2000,
  684. {
  685. "v": 2
  686. }
  687. ]
  688. ],
  689. "targets": [
  690. 2
  691. ]
  692. },
  693. "watchSnapshot": 2000,
  694. "expect": [
  695. {
  696. "query": {
  697. "path": "collection/key",
  698. "filters": [],
  699. "orderBys": []
  700. },
  701. "metadata": [
  702. [
  703. "collection/key",
  704. 2000,
  705. {
  706. "v": 2
  707. }
  708. ]
  709. ],
  710. "errorCode": 0,
  711. "fromCache": false,
  712. "hasPendingWrites": false
  713. }
  714. ]
  715. }
  716. ]
  717. },
  718. "Cache will hold local write until watch catches up": {
  719. "describeName": "Writes:",
  720. "itName": "Cache will hold local write until watch catches up",
  721. "tags": [],
  722. "config": {
  723. "useGarbageCollection": true
  724. },
  725. "steps": [
  726. {
  727. "userListen": [
  728. 2,
  729. {
  730. "path": "collection",
  731. "filters": [],
  732. "orderBys": []
  733. }
  734. ],
  735. "stateExpect": {
  736. "activeTargets": {
  737. "2": {
  738. "query": {
  739. "path": "collection",
  740. "filters": [],
  741. "orderBys": []
  742. },
  743. "resumeToken": ""
  744. }
  745. }
  746. }
  747. },
  748. {
  749. "watchAck": [
  750. 2
  751. ]
  752. },
  753. {
  754. "watchEntity": {
  755. "docs": [
  756. [
  757. "collection/key",
  758. 1000,
  759. {
  760. "v": 1
  761. }
  762. ]
  763. ],
  764. "targets": [
  765. 2
  766. ]
  767. }
  768. },
  769. {
  770. "watchCurrent": [
  771. [
  772. 2
  773. ],
  774. "resume-token-1000"
  775. ],
  776. "watchSnapshot": 1000,
  777. "expect": [
  778. {
  779. "query": {
  780. "path": "collection",
  781. "filters": [],
  782. "orderBys": []
  783. },
  784. "added": [
  785. [
  786. "collection/key",
  787. 1000,
  788. {
  789. "v": 1
  790. }
  791. ]
  792. ],
  793. "errorCode": 0,
  794. "fromCache": false,
  795. "hasPendingWrites": false
  796. }
  797. ]
  798. },
  799. {
  800. "userSet": [
  801. "collection/key",
  802. {
  803. "v": 3
  804. }
  805. ],
  806. "expect": [
  807. {
  808. "query": {
  809. "path": "collection",
  810. "filters": [],
  811. "orderBys": []
  812. },
  813. "modified": [
  814. [
  815. "collection/key",
  816. 1000,
  817. {
  818. "v": 3
  819. },
  820. "local"
  821. ]
  822. ],
  823. "errorCode": 0,
  824. "fromCache": false,
  825. "hasPendingWrites": true
  826. }
  827. ]
  828. },
  829. {
  830. "writeAck": {
  831. "version": 3000,
  832. "expectUserCallback": true
  833. }
  834. },
  835. {
  836. "watchEntity": {
  837. "docs": [
  838. [
  839. "collection/key",
  840. 2000,
  841. {
  842. "v": 2
  843. }
  844. ]
  845. ],
  846. "targets": [
  847. 2
  848. ]
  849. },
  850. "watchSnapshot": 2000
  851. },
  852. {
  853. "watchEntity": {
  854. "docs": [
  855. [
  856. "collection/b",
  857. 3000,
  858. {
  859. "doc": "b"
  860. }
  861. ],
  862. [
  863. "collection/key",
  864. 3000,
  865. {
  866. "v": 3
  867. }
  868. ]
  869. ],
  870. "targets": [
  871. 2
  872. ]
  873. },
  874. "watchSnapshot": 3000,
  875. "expect": [
  876. {
  877. "query": {
  878. "path": "collection",
  879. "filters": [],
  880. "orderBys": []
  881. },
  882. "added": [
  883. [
  884. "collection/b",
  885. 3000,
  886. {
  887. "doc": "b"
  888. }
  889. ]
  890. ],
  891. "metadata": [
  892. [
  893. "collection/key",
  894. 3000,
  895. {
  896. "v": 3
  897. }
  898. ]
  899. ],
  900. "errorCode": 0,
  901. "fromCache": false,
  902. "hasPendingWrites": false
  903. }
  904. ]
  905. }
  906. ]
  907. },
  908. "Writes are pipelined": {
  909. "describeName": "Writes:",
  910. "itName": "Writes are pipelined",
  911. "tags": [],
  912. "config": {
  913. "useGarbageCollection": true
  914. },
  915. "steps": [
  916. {
  917. "userListen": [
  918. 2,
  919. {
  920. "path": "collection",
  921. "filters": [],
  922. "orderBys": []
  923. }
  924. ],
  925. "stateExpect": {
  926. "activeTargets": {
  927. "2": {
  928. "query": {
  929. "path": "collection",
  930. "filters": [],
  931. "orderBys": []
  932. },
  933. "resumeToken": ""
  934. }
  935. }
  936. }
  937. },
  938. {
  939. "watchAck": [
  940. 2
  941. ]
  942. },
  943. {
  944. "watchCurrent": [
  945. [
  946. 2
  947. ],
  948. "resume-token"
  949. ]
  950. },
  951. {
  952. "userSet": [
  953. "collection/a0",
  954. {
  955. "v": 1
  956. }
  957. ],
  958. "expect": [
  959. {
  960. "query": {
  961. "path": "collection",
  962. "filters": [],
  963. "orderBys": []
  964. },
  965. "added": [
  966. [
  967. "collection/a0",
  968. 0,
  969. {
  970. "v": 1
  971. },
  972. "local"
  973. ]
  974. ],
  975. "errorCode": 0,
  976. "fromCache": true,
  977. "hasPendingWrites": true
  978. }
  979. ]
  980. },
  981. {
  982. "userSet": [
  983. "collection/a1",
  984. {
  985. "v": 1
  986. }
  987. ],
  988. "expect": [
  989. {
  990. "query": {
  991. "path": "collection",
  992. "filters": [],
  993. "orderBys": []
  994. },
  995. "added": [
  996. [
  997. "collection/a1",
  998. 0,
  999. {
  1000. "v": 1
  1001. },
  1002. "local"
  1003. ]
  1004. ],
  1005. "errorCode": 0,
  1006. "fromCache": true,
  1007. "hasPendingWrites": true
  1008. }
  1009. ]
  1010. },
  1011. {
  1012. "userSet": [
  1013. "collection/a2",
  1014. {
  1015. "v": 1
  1016. }
  1017. ],
  1018. "expect": [
  1019. {
  1020. "query": {
  1021. "path": "collection",
  1022. "filters": [],
  1023. "orderBys": []
  1024. },
  1025. "added": [
  1026. [
  1027. "collection/a2",
  1028. 0,
  1029. {
  1030. "v": 1
  1031. },
  1032. "local"
  1033. ]
  1034. ],
  1035. "errorCode": 0,
  1036. "fromCache": true,
  1037. "hasPendingWrites": true
  1038. }
  1039. ]
  1040. },
  1041. {
  1042. "userSet": [
  1043. "collection/a3",
  1044. {
  1045. "v": 1
  1046. }
  1047. ],
  1048. "expect": [
  1049. {
  1050. "query": {
  1051. "path": "collection",
  1052. "filters": [],
  1053. "orderBys": []
  1054. },
  1055. "added": [
  1056. [
  1057. "collection/a3",
  1058. 0,
  1059. {
  1060. "v": 1
  1061. },
  1062. "local"
  1063. ]
  1064. ],
  1065. "errorCode": 0,
  1066. "fromCache": true,
  1067. "hasPendingWrites": true
  1068. }
  1069. ]
  1070. },
  1071. {
  1072. "userSet": [
  1073. "collection/a4",
  1074. {
  1075. "v": 1
  1076. }
  1077. ],
  1078. "expect": [
  1079. {
  1080. "query": {
  1081. "path": "collection",
  1082. "filters": [],
  1083. "orderBys": []
  1084. },
  1085. "added": [
  1086. [
  1087. "collection/a4",
  1088. 0,
  1089. {
  1090. "v": 1
  1091. },
  1092. "local"
  1093. ]
  1094. ],
  1095. "errorCode": 0,
  1096. "fromCache": true,
  1097. "hasPendingWrites": true
  1098. }
  1099. ]
  1100. },
  1101. {
  1102. "userSet": [
  1103. "collection/a5",
  1104. {
  1105. "v": 1
  1106. }
  1107. ],
  1108. "expect": [
  1109. {
  1110. "query": {
  1111. "path": "collection",
  1112. "filters": [],
  1113. "orderBys": []
  1114. },
  1115. "added": [
  1116. [
  1117. "collection/a5",
  1118. 0,
  1119. {
  1120. "v": 1
  1121. },
  1122. "local"
  1123. ]
  1124. ],
  1125. "errorCode": 0,
  1126. "fromCache": true,
  1127. "hasPendingWrites": true
  1128. }
  1129. ]
  1130. },
  1131. {
  1132. "userSet": [
  1133. "collection/a6",
  1134. {
  1135. "v": 1
  1136. }
  1137. ],
  1138. "expect": [
  1139. {
  1140. "query": {
  1141. "path": "collection",
  1142. "filters": [],
  1143. "orderBys": []
  1144. },
  1145. "added": [
  1146. [
  1147. "collection/a6",
  1148. 0,
  1149. {
  1150. "v": 1
  1151. },
  1152. "local"
  1153. ]
  1154. ],
  1155. "errorCode": 0,
  1156. "fromCache": true,
  1157. "hasPendingWrites": true
  1158. }
  1159. ]
  1160. },
  1161. {
  1162. "userSet": [
  1163. "collection/a7",
  1164. {
  1165. "v": 1
  1166. }
  1167. ],
  1168. "expect": [
  1169. {
  1170. "query": {
  1171. "path": "collection",
  1172. "filters": [],
  1173. "orderBys": []
  1174. },
  1175. "added": [
  1176. [
  1177. "collection/a7",
  1178. 0,
  1179. {
  1180. "v": 1
  1181. },
  1182. "local"
  1183. ]
  1184. ],
  1185. "errorCode": 0,
  1186. "fromCache": true,
  1187. "hasPendingWrites": true
  1188. }
  1189. ]
  1190. },
  1191. {
  1192. "userSet": [
  1193. "collection/a8",
  1194. {
  1195. "v": 1
  1196. }
  1197. ],
  1198. "expect": [
  1199. {
  1200. "query": {
  1201. "path": "collection",
  1202. "filters": [],
  1203. "orderBys": []
  1204. },
  1205. "added": [
  1206. [
  1207. "collection/a8",
  1208. 0,
  1209. {
  1210. "v": 1
  1211. },
  1212. "local"
  1213. ]
  1214. ],
  1215. "errorCode": 0,
  1216. "fromCache": true,
  1217. "hasPendingWrites": true
  1218. }
  1219. ]
  1220. },
  1221. {
  1222. "userSet": [
  1223. "collection/a9",
  1224. {
  1225. "v": 1
  1226. }
  1227. ],
  1228. "expect": [
  1229. {
  1230. "query": {
  1231. "path": "collection",
  1232. "filters": [],
  1233. "orderBys": []
  1234. },
  1235. "added": [
  1236. [
  1237. "collection/a9",
  1238. 0,
  1239. {
  1240. "v": 1
  1241. },
  1242. "local"
  1243. ]
  1244. ],
  1245. "errorCode": 0,
  1246. "fromCache": true,
  1247. "hasPendingWrites": true
  1248. }
  1249. ]
  1250. },
  1251. {
  1252. "userSet": [
  1253. "collection/a10",
  1254. {
  1255. "v": 1
  1256. }
  1257. ],
  1258. "expect": [
  1259. {
  1260. "query": {
  1261. "path": "collection",
  1262. "filters": [],
  1263. "orderBys": []
  1264. },
  1265. "added": [
  1266. [
  1267. "collection/a10",
  1268. 0,
  1269. {
  1270. "v": 1
  1271. },
  1272. "local"
  1273. ]
  1274. ],
  1275. "errorCode": 0,
  1276. "fromCache": true,
  1277. "hasPendingWrites": true
  1278. }
  1279. ]
  1280. },
  1281. {
  1282. "userSet": [
  1283. "collection/a11",
  1284. {
  1285. "v": 1
  1286. }
  1287. ],
  1288. "expect": [
  1289. {
  1290. "query": {
  1291. "path": "collection",
  1292. "filters": [],
  1293. "orderBys": []
  1294. },
  1295. "added": [
  1296. [
  1297. "collection/a11",
  1298. 0,
  1299. {
  1300. "v": 1
  1301. },
  1302. "local"
  1303. ]
  1304. ],
  1305. "errorCode": 0,
  1306. "fromCache": true,
  1307. "hasPendingWrites": true
  1308. }
  1309. ]
  1310. },
  1311. {
  1312. "userSet": [
  1313. "collection/a12",
  1314. {
  1315. "v": 1
  1316. }
  1317. ],
  1318. "expect": [
  1319. {
  1320. "query": {
  1321. "path": "collection",
  1322. "filters": [],
  1323. "orderBys": []
  1324. },
  1325. "added": [
  1326. [
  1327. "collection/a12",
  1328. 0,
  1329. {
  1330. "v": 1
  1331. },
  1332. "local"
  1333. ]
  1334. ],
  1335. "errorCode": 0,
  1336. "fromCache": true,
  1337. "hasPendingWrites": true
  1338. }
  1339. ]
  1340. },
  1341. {
  1342. "userSet": [
  1343. "collection/a13",
  1344. {
  1345. "v": 1
  1346. }
  1347. ],
  1348. "expect": [
  1349. {
  1350. "query": {
  1351. "path": "collection",
  1352. "filters": [],
  1353. "orderBys": []
  1354. },
  1355. "added": [
  1356. [
  1357. "collection/a13",
  1358. 0,
  1359. {
  1360. "v": 1
  1361. },
  1362. "local"
  1363. ]
  1364. ],
  1365. "errorCode": 0,
  1366. "fromCache": true,
  1367. "hasPendingWrites": true
  1368. }
  1369. ]
  1370. },
  1371. {
  1372. "userSet": [
  1373. "collection/a14",
  1374. {
  1375. "v": 1
  1376. }
  1377. ],
  1378. "expect": [
  1379. {
  1380. "query": {
  1381. "path": "collection",
  1382. "filters": [],
  1383. "orderBys": []
  1384. },
  1385. "added": [
  1386. [
  1387. "collection/a14",
  1388. 0,
  1389. {
  1390. "v": 1
  1391. },
  1392. "local"
  1393. ]
  1394. ],
  1395. "errorCode": 0,
  1396. "fromCache": true,
  1397. "hasPendingWrites": true
  1398. }
  1399. ],
  1400. "stateExpect": {
  1401. "numOutstandingWrites": 10
  1402. }
  1403. },
  1404. {
  1405. "writeAck": {
  1406. "version": 1000,
  1407. "expectUserCallback": true
  1408. }
  1409. },
  1410. {
  1411. "watchEntity": {
  1412. "docs": [
  1413. [
  1414. "collection/a0",
  1415. 1000,
  1416. {
  1417. "v": 1
  1418. }
  1419. ]
  1420. ],
  1421. "targets": [
  1422. 2
  1423. ]
  1424. },
  1425. "watchSnapshot": 1000,
  1426. "expect": [
  1427. {
  1428. "query": {
  1429. "path": "collection",
  1430. "filters": [],
  1431. "orderBys": []
  1432. },
  1433. "metadata": [
  1434. [
  1435. "collection/a0",
  1436. 1000,
  1437. {
  1438. "v": 1
  1439. }
  1440. ]
  1441. ],
  1442. "errorCode": 0,
  1443. "fromCache": false,
  1444. "hasPendingWrites": true
  1445. }
  1446. ]
  1447. },
  1448. {
  1449. "writeAck": {
  1450. "version": 2000,
  1451. "expectUserCallback": true
  1452. }
  1453. },
  1454. {
  1455. "watchEntity": {
  1456. "docs": [
  1457. [
  1458. "collection/a1",
  1459. 2000,
  1460. {
  1461. "v": 1
  1462. }
  1463. ]
  1464. ],
  1465. "targets": [
  1466. 2
  1467. ]
  1468. },
  1469. "watchSnapshot": 2000,
  1470. "expect": [
  1471. {
  1472. "query": {
  1473. "path": "collection",
  1474. "filters": [],
  1475. "orderBys": []
  1476. },
  1477. "metadata": [
  1478. [
  1479. "collection/a1",
  1480. 2000,
  1481. {
  1482. "v": 1
  1483. }
  1484. ]
  1485. ],
  1486. "errorCode": 0,
  1487. "fromCache": false,
  1488. "hasPendingWrites": true
  1489. }
  1490. ]
  1491. },
  1492. {
  1493. "writeAck": {
  1494. "version": 3000,
  1495. "expectUserCallback": true
  1496. }
  1497. },
  1498. {
  1499. "watchEntity": {
  1500. "docs": [
  1501. [
  1502. "collection/a2",
  1503. 3000,
  1504. {
  1505. "v": 1
  1506. }
  1507. ]
  1508. ],
  1509. "targets": [
  1510. 2
  1511. ]
  1512. },
  1513. "watchSnapshot": 3000,
  1514. "expect": [
  1515. {
  1516. "query": {
  1517. "path": "collection",
  1518. "filters": [],
  1519. "orderBys": []
  1520. },
  1521. "metadata": [
  1522. [
  1523. "collection/a2",
  1524. 3000,
  1525. {
  1526. "v": 1
  1527. }
  1528. ]
  1529. ],
  1530. "errorCode": 0,
  1531. "fromCache": false,
  1532. "hasPendingWrites": true
  1533. }
  1534. ]
  1535. },
  1536. {
  1537. "writeAck": {
  1538. "version": 4000,
  1539. "expectUserCallback": true
  1540. }
  1541. },
  1542. {
  1543. "watchEntity": {
  1544. "docs": [
  1545. [
  1546. "collection/a3",
  1547. 4000,
  1548. {
  1549. "v": 1
  1550. }
  1551. ]
  1552. ],
  1553. "targets": [
  1554. 2
  1555. ]
  1556. },
  1557. "watchSnapshot": 4000,
  1558. "expect": [
  1559. {
  1560. "query": {
  1561. "path": "collection",
  1562. "filters": [],
  1563. "orderBys": []
  1564. },
  1565. "metadata": [
  1566. [
  1567. "collection/a3",
  1568. 4000,
  1569. {
  1570. "v": 1
  1571. }
  1572. ]
  1573. ],
  1574. "errorCode": 0,
  1575. "fromCache": false,
  1576. "hasPendingWrites": true
  1577. }
  1578. ]
  1579. },
  1580. {
  1581. "writeAck": {
  1582. "version": 5000,
  1583. "expectUserCallback": true
  1584. }
  1585. },
  1586. {
  1587. "watchEntity": {
  1588. "docs": [
  1589. [
  1590. "collection/a4",
  1591. 5000,
  1592. {
  1593. "v": 1
  1594. }
  1595. ]
  1596. ],
  1597. "targets": [
  1598. 2
  1599. ]
  1600. },
  1601. "watchSnapshot": 5000,
  1602. "expect": [
  1603. {
  1604. "query": {
  1605. "path": "collection",
  1606. "filters": [],
  1607. "orderBys": []
  1608. },
  1609. "metadata": [
  1610. [
  1611. "collection/a4",
  1612. 5000,
  1613. {
  1614. "v": 1
  1615. }
  1616. ]
  1617. ],
  1618. "errorCode": 0,
  1619. "fromCache": false,
  1620. "hasPendingWrites": true
  1621. }
  1622. ]
  1623. },
  1624. {
  1625. "writeAck": {
  1626. "version": 6000,
  1627. "expectUserCallback": true
  1628. }
  1629. },
  1630. {
  1631. "watchEntity": {
  1632. "docs": [
  1633. [
  1634. "collection/a5",
  1635. 6000,
  1636. {
  1637. "v": 1
  1638. }
  1639. ]
  1640. ],
  1641. "targets": [
  1642. 2
  1643. ]
  1644. },
  1645. "watchSnapshot": 6000,
  1646. "expect": [
  1647. {
  1648. "query": {
  1649. "path": "collection",
  1650. "filters": [],
  1651. "orderBys": []
  1652. },
  1653. "metadata": [
  1654. [
  1655. "collection/a5",
  1656. 6000,
  1657. {
  1658. "v": 1
  1659. }
  1660. ]
  1661. ],
  1662. "errorCode": 0,
  1663. "fromCache": false,
  1664. "hasPendingWrites": true
  1665. }
  1666. ]
  1667. },
  1668. {
  1669. "writeAck": {
  1670. "version": 7000,
  1671. "expectUserCallback": true
  1672. }
  1673. },
  1674. {
  1675. "watchEntity": {
  1676. "docs": [
  1677. [
  1678. "collection/a6",
  1679. 7000,
  1680. {
  1681. "v": 1
  1682. }
  1683. ]
  1684. ],
  1685. "targets": [
  1686. 2
  1687. ]
  1688. },
  1689. "watchSnapshot": 7000,
  1690. "expect": [
  1691. {
  1692. "query": {
  1693. "path": "collection",
  1694. "filters": [],
  1695. "orderBys": []
  1696. },
  1697. "metadata": [
  1698. [
  1699. "collection/a6",
  1700. 7000,
  1701. {
  1702. "v": 1
  1703. }
  1704. ]
  1705. ],
  1706. "errorCode": 0,
  1707. "fromCache": false,
  1708. "hasPendingWrites": true
  1709. }
  1710. ]
  1711. },
  1712. {
  1713. "writeAck": {
  1714. "version": 8000,
  1715. "expectUserCallback": true
  1716. }
  1717. },
  1718. {
  1719. "watchEntity": {
  1720. "docs": [
  1721. [
  1722. "collection/a7",
  1723. 8000,
  1724. {
  1725. "v": 1
  1726. }
  1727. ]
  1728. ],
  1729. "targets": [
  1730. 2
  1731. ]
  1732. },
  1733. "watchSnapshot": 8000,
  1734. "expect": [
  1735. {
  1736. "query": {
  1737. "path": "collection",
  1738. "filters": [],
  1739. "orderBys": []
  1740. },
  1741. "metadata": [
  1742. [
  1743. "collection/a7",
  1744. 8000,
  1745. {
  1746. "v": 1
  1747. }
  1748. ]
  1749. ],
  1750. "errorCode": 0,
  1751. "fromCache": false,
  1752. "hasPendingWrites": true
  1753. }
  1754. ]
  1755. },
  1756. {
  1757. "writeAck": {
  1758. "version": 9000,
  1759. "expectUserCallback": true
  1760. }
  1761. },
  1762. {
  1763. "watchEntity": {
  1764. "docs": [
  1765. [
  1766. "collection/a8",
  1767. 9000,
  1768. {
  1769. "v": 1
  1770. }
  1771. ]
  1772. ],
  1773. "targets": [
  1774. 2
  1775. ]
  1776. },
  1777. "watchSnapshot": 9000,
  1778. "expect": [
  1779. {
  1780. "query": {
  1781. "path": "collection",
  1782. "filters": [],
  1783. "orderBys": []
  1784. },
  1785. "metadata": [
  1786. [
  1787. "collection/a8",
  1788. 9000,
  1789. {
  1790. "v": 1
  1791. }
  1792. ]
  1793. ],
  1794. "errorCode": 0,
  1795. "fromCache": false,
  1796. "hasPendingWrites": true
  1797. }
  1798. ]
  1799. },
  1800. {
  1801. "writeAck": {
  1802. "version": 10000,
  1803. "expectUserCallback": true
  1804. }
  1805. },
  1806. {
  1807. "watchEntity": {
  1808. "docs": [
  1809. [
  1810. "collection/a9",
  1811. 10000,
  1812. {
  1813. "v": 1
  1814. }
  1815. ]
  1816. ],
  1817. "targets": [
  1818. 2
  1819. ]
  1820. },
  1821. "watchSnapshot": 10000,
  1822. "expect": [
  1823. {
  1824. "query": {
  1825. "path": "collection",
  1826. "filters": [],
  1827. "orderBys": []
  1828. },
  1829. "metadata": [
  1830. [
  1831. "collection/a9",
  1832. 10000,
  1833. {
  1834. "v": 1
  1835. }
  1836. ]
  1837. ],
  1838. "errorCode": 0,
  1839. "fromCache": false,
  1840. "hasPendingWrites": true
  1841. }
  1842. ]
  1843. },
  1844. {
  1845. "writeAck": {
  1846. "version": 11000,
  1847. "expectUserCallback": true
  1848. }
  1849. },
  1850. {
  1851. "watchEntity": {
  1852. "docs": [
  1853. [
  1854. "collection/a10",
  1855. 11000,
  1856. {
  1857. "v": 1
  1858. }
  1859. ]
  1860. ],
  1861. "targets": [
  1862. 2
  1863. ]
  1864. },
  1865. "watchSnapshot": 11000,
  1866. "expect": [
  1867. {
  1868. "query": {
  1869. "path": "collection",
  1870. "filters": [],
  1871. "orderBys": []
  1872. },
  1873. "metadata": [
  1874. [
  1875. "collection/a10",
  1876. 11000,
  1877. {
  1878. "v": 1
  1879. }
  1880. ]
  1881. ],
  1882. "errorCode": 0,
  1883. "fromCache": false,
  1884. "hasPendingWrites": true
  1885. }
  1886. ]
  1887. },
  1888. {
  1889. "writeAck": {
  1890. "version": 12000,
  1891. "expectUserCallback": true
  1892. }
  1893. },
  1894. {
  1895. "watchEntity": {
  1896. "docs": [
  1897. [
  1898. "collection/a11",
  1899. 12000,
  1900. {
  1901. "v": 1
  1902. }
  1903. ]
  1904. ],
  1905. "targets": [
  1906. 2
  1907. ]
  1908. },
  1909. "watchSnapshot": 12000,
  1910. "expect": [
  1911. {
  1912. "query": {
  1913. "path": "collection",
  1914. "filters": [],
  1915. "orderBys": []
  1916. },
  1917. "metadata": [
  1918. [
  1919. "collection/a11",
  1920. 12000,
  1921. {
  1922. "v": 1
  1923. }
  1924. ]
  1925. ],
  1926. "errorCode": 0,
  1927. "fromCache": false,
  1928. "hasPendingWrites": true
  1929. }
  1930. ]
  1931. },
  1932. {
  1933. "writeAck": {
  1934. "version": 13000,
  1935. "expectUserCallback": true
  1936. }
  1937. },
  1938. {
  1939. "watchEntity": {
  1940. "docs": [
  1941. [
  1942. "collection/a12",
  1943. 13000,
  1944. {
  1945. "v": 1
  1946. }
  1947. ]
  1948. ],
  1949. "targets": [
  1950. 2
  1951. ]
  1952. },
  1953. "watchSnapshot": 13000,
  1954. "expect": [
  1955. {
  1956. "query": {
  1957. "path": "collection",
  1958. "filters": [],
  1959. "orderBys": []
  1960. },
  1961. "metadata": [
  1962. [
  1963. "collection/a12",
  1964. 13000,
  1965. {
  1966. "v": 1
  1967. }
  1968. ]
  1969. ],
  1970. "errorCode": 0,
  1971. "fromCache": false,
  1972. "hasPendingWrites": true
  1973. }
  1974. ]
  1975. },
  1976. {
  1977. "writeAck": {
  1978. "version": 14000,
  1979. "expectUserCallback": true
  1980. }
  1981. },
  1982. {
  1983. "watchEntity": {
  1984. "docs": [
  1985. [
  1986. "collection/a13",
  1987. 14000,
  1988. {
  1989. "v": 1
  1990. }
  1991. ]
  1992. ],
  1993. "targets": [
  1994. 2
  1995. ]
  1996. },
  1997. "watchSnapshot": 14000,
  1998. "expect": [
  1999. {
  2000. "query": {
  2001. "path": "collection",
  2002. "filters": [],
  2003. "orderBys": []
  2004. },
  2005. "metadata": [
  2006. [
  2007. "collection/a13",
  2008. 14000,
  2009. {
  2010. "v": 1
  2011. }
  2012. ]
  2013. ],
  2014. "errorCode": 0,
  2015. "fromCache": false,
  2016. "hasPendingWrites": true
  2017. }
  2018. ]
  2019. },
  2020. {
  2021. "writeAck": {
  2022. "version": 15000,
  2023. "expectUserCallback": true
  2024. }
  2025. },
  2026. {
  2027. "watchEntity": {
  2028. "docs": [
  2029. [
  2030. "collection/a14",
  2031. 15000,
  2032. {
  2033. "v": 1
  2034. }
  2035. ]
  2036. ],
  2037. "targets": [
  2038. 2
  2039. ]
  2040. },
  2041. "watchSnapshot": 15000,
  2042. "expect": [
  2043. {
  2044. "query": {
  2045. "path": "collection",
  2046. "filters": [],
  2047. "orderBys": []
  2048. },
  2049. "metadata": [
  2050. [
  2051. "collection/a14",
  2052. 15000,
  2053. {
  2054. "v": 1
  2055. }
  2056. ]
  2057. ],
  2058. "errorCode": 0,
  2059. "fromCache": false,
  2060. "hasPendingWrites": false
  2061. }
  2062. ]
  2063. }
  2064. ]
  2065. },
  2066. "Pipelined writes can fail": {
  2067. "describeName": "Writes:",
  2068. "itName": "Pipelined writes can fail",
  2069. "tags": [],
  2070. "config": {
  2071. "useGarbageCollection": true
  2072. },
  2073. "steps": [
  2074. {
  2075. "userListen": [
  2076. 2,
  2077. {
  2078. "path": "collection",
  2079. "filters": [],
  2080. "orderBys": []
  2081. }
  2082. ],
  2083. "stateExpect": {
  2084. "activeTargets": {
  2085. "2": {
  2086. "query": {
  2087. "path": "collection",
  2088. "filters": [],
  2089. "orderBys": []
  2090. },
  2091. "resumeToken": ""
  2092. }
  2093. }
  2094. }
  2095. },
  2096. {
  2097. "userSet": [
  2098. "collection/a0",
  2099. {
  2100. "v": 1
  2101. }
  2102. ],
  2103. "expect": [
  2104. {
  2105. "query": {
  2106. "path": "collection",
  2107. "filters": [],
  2108. "orderBys": []
  2109. },
  2110. "added": [
  2111. [
  2112. "collection/a0",
  2113. 0,
  2114. {
  2115. "v": 1
  2116. },
  2117. "local"
  2118. ]
  2119. ],
  2120. "errorCode": 0,
  2121. "fromCache": true,
  2122. "hasPendingWrites": true
  2123. }
  2124. ]
  2125. },
  2126. {
  2127. "userSet": [
  2128. "collection/a1",
  2129. {
  2130. "v": 1
  2131. }
  2132. ],
  2133. "expect": [
  2134. {
  2135. "query": {
  2136. "path": "collection",
  2137. "filters": [],
  2138. "orderBys": []
  2139. },
  2140. "added": [
  2141. [
  2142. "collection/a1",
  2143. 0,
  2144. {
  2145. "v": 1
  2146. },
  2147. "local"
  2148. ]
  2149. ],
  2150. "errorCode": 0,
  2151. "fromCache": true,
  2152. "hasPendingWrites": true
  2153. }
  2154. ]
  2155. },
  2156. {
  2157. "userSet": [
  2158. "collection/a2",
  2159. {
  2160. "v": 1
  2161. }
  2162. ],
  2163. "expect": [
  2164. {
  2165. "query": {
  2166. "path": "collection",
  2167. "filters": [],
  2168. "orderBys": []
  2169. },
  2170. "added": [
  2171. [
  2172. "collection/a2",
  2173. 0,
  2174. {
  2175. "v": 1
  2176. },
  2177. "local"
  2178. ]
  2179. ],
  2180. "errorCode": 0,
  2181. "fromCache": true,
  2182. "hasPendingWrites": true
  2183. }
  2184. ]
  2185. },
  2186. {
  2187. "userSet": [
  2188. "collection/a3",
  2189. {
  2190. "v": 1
  2191. }
  2192. ],
  2193. "expect": [
  2194. {
  2195. "query": {
  2196. "path": "collection",
  2197. "filters": [],
  2198. "orderBys": []
  2199. },
  2200. "added": [
  2201. [
  2202. "collection/a3",
  2203. 0,
  2204. {
  2205. "v": 1
  2206. },
  2207. "local"
  2208. ]
  2209. ],
  2210. "errorCode": 0,
  2211. "fromCache": true,
  2212. "hasPendingWrites": true
  2213. }
  2214. ]
  2215. },
  2216. {
  2217. "userSet": [
  2218. "collection/a4",
  2219. {
  2220. "v": 1
  2221. }
  2222. ],
  2223. "expect": [
  2224. {
  2225. "query": {
  2226. "path": "collection",
  2227. "filters": [],
  2228. "orderBys": []
  2229. },
  2230. "added": [
  2231. [
  2232. "collection/a4",
  2233. 0,
  2234. {
  2235. "v": 1
  2236. },
  2237. "local"
  2238. ]
  2239. ],
  2240. "errorCode": 0,
  2241. "fromCache": true,
  2242. "hasPendingWrites": true
  2243. }
  2244. ]
  2245. },
  2246. {
  2247. "userSet": [
  2248. "collection/a5",
  2249. {
  2250. "v": 1
  2251. }
  2252. ],
  2253. "expect": [
  2254. {
  2255. "query": {
  2256. "path": "collection",
  2257. "filters": [],
  2258. "orderBys": []
  2259. },
  2260. "added": [
  2261. [
  2262. "collection/a5",
  2263. 0,
  2264. {
  2265. "v": 1
  2266. },
  2267. "local"
  2268. ]
  2269. ],
  2270. "errorCode": 0,
  2271. "fromCache": true,
  2272. "hasPendingWrites": true
  2273. }
  2274. ]
  2275. },
  2276. {
  2277. "userSet": [
  2278. "collection/a6",
  2279. {
  2280. "v": 1
  2281. }
  2282. ],
  2283. "expect": [
  2284. {
  2285. "query": {
  2286. "path": "collection",
  2287. "filters": [],
  2288. "orderBys": []
  2289. },
  2290. "added": [
  2291. [
  2292. "collection/a6",
  2293. 0,
  2294. {
  2295. "v": 1
  2296. },
  2297. "local"
  2298. ]
  2299. ],
  2300. "errorCode": 0,
  2301. "fromCache": true,
  2302. "hasPendingWrites": true
  2303. }
  2304. ]
  2305. },
  2306. {
  2307. "userSet": [
  2308. "collection/a7",
  2309. {
  2310. "v": 1
  2311. }
  2312. ],
  2313. "expect": [
  2314. {
  2315. "query": {
  2316. "path": "collection",
  2317. "filters": [],
  2318. "orderBys": []
  2319. },
  2320. "added": [
  2321. [
  2322. "collection/a7",
  2323. 0,
  2324. {
  2325. "v": 1
  2326. },
  2327. "local"
  2328. ]
  2329. ],
  2330. "errorCode": 0,
  2331. "fromCache": true,
  2332. "hasPendingWrites": true
  2333. }
  2334. ]
  2335. },
  2336. {
  2337. "userSet": [
  2338. "collection/a8",
  2339. {
  2340. "v": 1
  2341. }
  2342. ],
  2343. "expect": [
  2344. {
  2345. "query": {
  2346. "path": "collection",
  2347. "filters": [],
  2348. "orderBys": []
  2349. },
  2350. "added": [
  2351. [
  2352. "collection/a8",
  2353. 0,
  2354. {
  2355. "v": 1
  2356. },
  2357. "local"
  2358. ]
  2359. ],
  2360. "errorCode": 0,
  2361. "fromCache": true,
  2362. "hasPendingWrites": true
  2363. }
  2364. ]
  2365. },
  2366. {
  2367. "userSet": [
  2368. "collection/a9",
  2369. {
  2370. "v": 1
  2371. }
  2372. ],
  2373. "expect": [
  2374. {
  2375. "query": {
  2376. "path": "collection",
  2377. "filters": [],
  2378. "orderBys": []
  2379. },
  2380. "added": [
  2381. [
  2382. "collection/a9",
  2383. 0,
  2384. {
  2385. "v": 1
  2386. },
  2387. "local"
  2388. ]
  2389. ],
  2390. "errorCode": 0,
  2391. "fromCache": true,
  2392. "hasPendingWrites": true
  2393. }
  2394. ]
  2395. },
  2396. {
  2397. "userSet": [
  2398. "collection/a10",
  2399. {
  2400. "v": 1
  2401. }
  2402. ],
  2403. "expect": [
  2404. {
  2405. "query": {
  2406. "path": "collection",
  2407. "filters": [],
  2408. "orderBys": []
  2409. },
  2410. "added": [
  2411. [
  2412. "collection/a10",
  2413. 0,
  2414. {
  2415. "v": 1
  2416. },
  2417. "local"
  2418. ]
  2419. ],
  2420. "errorCode": 0,
  2421. "fromCache": true,
  2422. "hasPendingWrites": true
  2423. }
  2424. ]
  2425. },
  2426. {
  2427. "userSet": [
  2428. "collection/a11",
  2429. {
  2430. "v": 1
  2431. }
  2432. ],
  2433. "expect": [
  2434. {
  2435. "query": {
  2436. "path": "collection",
  2437. "filters": [],
  2438. "orderBys": []
  2439. },
  2440. "added": [
  2441. [
  2442. "collection/a11",
  2443. 0,
  2444. {
  2445. "v": 1
  2446. },
  2447. "local"
  2448. ]
  2449. ],
  2450. "errorCode": 0,
  2451. "fromCache": true,
  2452. "hasPendingWrites": true
  2453. }
  2454. ]
  2455. },
  2456. {
  2457. "userSet": [
  2458. "collection/a12",
  2459. {
  2460. "v": 1
  2461. }
  2462. ],
  2463. "expect": [
  2464. {
  2465. "query": {
  2466. "path": "collection",
  2467. "filters": [],
  2468. "orderBys": []
  2469. },
  2470. "added": [
  2471. [
  2472. "collection/a12",
  2473. 0,
  2474. {
  2475. "v": 1
  2476. },
  2477. "local"
  2478. ]
  2479. ],
  2480. "errorCode": 0,
  2481. "fromCache": true,
  2482. "hasPendingWrites": true
  2483. }
  2484. ]
  2485. },
  2486. {
  2487. "userSet": [
  2488. "collection/a13",
  2489. {
  2490. "v": 1
  2491. }
  2492. ],
  2493. "expect": [
  2494. {
  2495. "query": {
  2496. "path": "collection",
  2497. "filters": [],
  2498. "orderBys": []
  2499. },
  2500. "added": [
  2501. [
  2502. "collection/a13",
  2503. 0,
  2504. {
  2505. "v": 1
  2506. },
  2507. "local"
  2508. ]
  2509. ],
  2510. "errorCode": 0,
  2511. "fromCache": true,
  2512. "hasPendingWrites": true
  2513. }
  2514. ]
  2515. },
  2516. {
  2517. "userSet": [
  2518. "collection/a14",
  2519. {
  2520. "v": 1
  2521. }
  2522. ],
  2523. "expect": [
  2524. {
  2525. "query": {
  2526. "path": "collection",
  2527. "filters": [],
  2528. "orderBys": []
  2529. },
  2530. "added": [
  2531. [
  2532. "collection/a14",
  2533. 0,
  2534. {
  2535. "v": 1
  2536. },
  2537. "local"
  2538. ]
  2539. ],
  2540. "errorCode": 0,
  2541. "fromCache": true,
  2542. "hasPendingWrites": true
  2543. }
  2544. ],
  2545. "stateExpect": {
  2546. "numOutstandingWrites": 10
  2547. }
  2548. },
  2549. {
  2550. "failWrite": {
  2551. "error": {
  2552. "code": 7
  2553. },
  2554. "expectUserCallback": true
  2555. },
  2556. "expect": [
  2557. {
  2558. "query": {
  2559. "path": "collection",
  2560. "filters": [],
  2561. "orderBys": []
  2562. },
  2563. "removed": [
  2564. [
  2565. "collection/a0",
  2566. 0,
  2567. {
  2568. "v": 1
  2569. },
  2570. "local"
  2571. ]
  2572. ],
  2573. "errorCode": 0,
  2574. "fromCache": true,
  2575. "hasPendingWrites": true
  2576. }
  2577. ]
  2578. },
  2579. {
  2580. "failWrite": {
  2581. "error": {
  2582. "code": 7
  2583. },
  2584. "expectUserCallback": true
  2585. },
  2586. "expect": [
  2587. {
  2588. "query": {
  2589. "path": "collection",
  2590. "filters": [],
  2591. "orderBys": []
  2592. },
  2593. "removed": [
  2594. [
  2595. "collection/a1",
  2596. 0,
  2597. {
  2598. "v": 1
  2599. },
  2600. "local"
  2601. ]
  2602. ],
  2603. "errorCode": 0,
  2604. "fromCache": true,
  2605. "hasPendingWrites": true
  2606. }
  2607. ]
  2608. },
  2609. {
  2610. "failWrite": {
  2611. "error": {
  2612. "code": 7
  2613. },
  2614. "expectUserCallback": true
  2615. },
  2616. "expect": [
  2617. {
  2618. "query": {
  2619. "path": "collection",
  2620. "filters": [],
  2621. "orderBys": []
  2622. },
  2623. "removed": [
  2624. [
  2625. "collection/a2",
  2626. 0,
  2627. {
  2628. "v": 1
  2629. },
  2630. "local"
  2631. ]
  2632. ],
  2633. "errorCode": 0,
  2634. "fromCache": true,
  2635. "hasPendingWrites": true
  2636. }
  2637. ]
  2638. },
  2639. {
  2640. "failWrite": {
  2641. "error": {
  2642. "code": 7
  2643. },
  2644. "expectUserCallback": true
  2645. },
  2646. "expect": [
  2647. {
  2648. "query": {
  2649. "path": "collection",
  2650. "filters": [],
  2651. "orderBys": []
  2652. },
  2653. "removed": [
  2654. [
  2655. "collection/a3",
  2656. 0,
  2657. {
  2658. "v": 1
  2659. },
  2660. "local"
  2661. ]
  2662. ],
  2663. "errorCode": 0,
  2664. "fromCache": true,
  2665. "hasPendingWrites": true
  2666. }
  2667. ]
  2668. },
  2669. {
  2670. "failWrite": {
  2671. "error": {
  2672. "code": 7
  2673. },
  2674. "expectUserCallback": true
  2675. },
  2676. "expect": [
  2677. {
  2678. "query": {
  2679. "path": "collection",
  2680. "filters": [],
  2681. "orderBys": []
  2682. },
  2683. "removed": [
  2684. [
  2685. "collection/a4",
  2686. 0,
  2687. {
  2688. "v": 1
  2689. },
  2690. "local"
  2691. ]
  2692. ],
  2693. "errorCode": 0,
  2694. "fromCache": true,
  2695. "hasPendingWrites": true
  2696. }
  2697. ]
  2698. },
  2699. {
  2700. "failWrite": {
  2701. "error": {
  2702. "code": 7
  2703. },
  2704. "expectUserCallback": true
  2705. },
  2706. "expect": [
  2707. {
  2708. "query": {
  2709. "path": "collection",
  2710. "filters": [],
  2711. "orderBys": []
  2712. },
  2713. "removed": [
  2714. [
  2715. "collection/a5",
  2716. 0,
  2717. {
  2718. "v": 1
  2719. },
  2720. "local"
  2721. ]
  2722. ],
  2723. "errorCode": 0,
  2724. "fromCache": true,
  2725. "hasPendingWrites": true
  2726. }
  2727. ]
  2728. },
  2729. {
  2730. "failWrite": {
  2731. "error": {
  2732. "code": 7
  2733. },
  2734. "expectUserCallback": true
  2735. },
  2736. "expect": [
  2737. {
  2738. "query": {
  2739. "path": "collection",
  2740. "filters": [],
  2741. "orderBys": []
  2742. },
  2743. "removed": [
  2744. [
  2745. "collection/a6",
  2746. 0,
  2747. {
  2748. "v": 1
  2749. },
  2750. "local"
  2751. ]
  2752. ],
  2753. "errorCode": 0,
  2754. "fromCache": true,
  2755. "hasPendingWrites": true
  2756. }
  2757. ]
  2758. },
  2759. {
  2760. "failWrite": {
  2761. "error": {
  2762. "code": 7
  2763. },
  2764. "expectUserCallback": true
  2765. },
  2766. "expect": [
  2767. {
  2768. "query": {
  2769. "path": "collection",
  2770. "filters": [],
  2771. "orderBys": []
  2772. },
  2773. "removed": [
  2774. [
  2775. "collection/a7",
  2776. 0,
  2777. {
  2778. "v": 1
  2779. },
  2780. "local"
  2781. ]
  2782. ],
  2783. "errorCode": 0,
  2784. "fromCache": true,
  2785. "hasPendingWrites": true
  2786. }
  2787. ]
  2788. },
  2789. {
  2790. "failWrite": {
  2791. "error": {
  2792. "code": 7
  2793. },
  2794. "expectUserCallback": true
  2795. },
  2796. "expect": [
  2797. {
  2798. "query": {
  2799. "path": "collection",
  2800. "filters": [],
  2801. "orderBys": []
  2802. },
  2803. "removed": [
  2804. [
  2805. "collection/a8",
  2806. 0,
  2807. {
  2808. "v": 1
  2809. },
  2810. "local"
  2811. ]
  2812. ],
  2813. "errorCode": 0,
  2814. "fromCache": true,
  2815. "hasPendingWrites": true
  2816. }
  2817. ]
  2818. },
  2819. {
  2820. "failWrite": {
  2821. "error": {
  2822. "code": 7
  2823. },
  2824. "expectUserCallback": true
  2825. },
  2826. "expect": [
  2827. {
  2828. "query": {
  2829. "path": "collection",
  2830. "filters": [],
  2831. "orderBys": []
  2832. },
  2833. "removed": [
  2834. [
  2835. "collection/a9",
  2836. 0,
  2837. {
  2838. "v": 1
  2839. },
  2840. "local"
  2841. ]
  2842. ],
  2843. "errorCode": 0,
  2844. "fromCache": true,
  2845. "hasPendingWrites": true
  2846. }
  2847. ]
  2848. },
  2849. {
  2850. "failWrite": {
  2851. "error": {
  2852. "code": 7
  2853. },
  2854. "expectUserCallback": true
  2855. },
  2856. "expect": [
  2857. {
  2858. "query": {
  2859. "path": "collection",
  2860. "filters": [],
  2861. "orderBys": []
  2862. },
  2863. "removed": [
  2864. [
  2865. "collection/a10",
  2866. 0,
  2867. {
  2868. "v": 1
  2869. },
  2870. "local"
  2871. ]
  2872. ],
  2873. "errorCode": 0,
  2874. "fromCache": true,
  2875. "hasPendingWrites": true
  2876. }
  2877. ]
  2878. },
  2879. {
  2880. "failWrite": {
  2881. "error": {
  2882. "code": 7
  2883. },
  2884. "expectUserCallback": true
  2885. },
  2886. "expect": [
  2887. {
  2888. "query": {
  2889. "path": "collection",
  2890. "filters": [],
  2891. "orderBys": []
  2892. },
  2893. "removed": [
  2894. [
  2895. "collection/a11",
  2896. 0,
  2897. {
  2898. "v": 1
  2899. },
  2900. "local"
  2901. ]
  2902. ],
  2903. "errorCode": 0,
  2904. "fromCache": true,
  2905. "hasPendingWrites": true
  2906. }
  2907. ]
  2908. },
  2909. {
  2910. "failWrite": {
  2911. "error": {
  2912. "code": 7
  2913. },
  2914. "expectUserCallback": true
  2915. },
  2916. "expect": [
  2917. {
  2918. "query": {
  2919. "path": "collection",
  2920. "filters": [],
  2921. "orderBys": []
  2922. },
  2923. "removed": [
  2924. [
  2925. "collection/a12",
  2926. 0,
  2927. {
  2928. "v": 1
  2929. },
  2930. "local"
  2931. ]
  2932. ],
  2933. "errorCode": 0,
  2934. "fromCache": true,
  2935. "hasPendingWrites": true
  2936. }
  2937. ]
  2938. },
  2939. {
  2940. "failWrite": {
  2941. "error": {
  2942. "code": 7
  2943. },
  2944. "expectUserCallback": true
  2945. },
  2946. "expect": [
  2947. {
  2948. "query": {
  2949. "path": "collection",
  2950. "filters": [],
  2951. "orderBys": []
  2952. },
  2953. "removed": [
  2954. [
  2955. "collection/a13",
  2956. 0,
  2957. {
  2958. "v": 1
  2959. },
  2960. "local"
  2961. ]
  2962. ],
  2963. "errorCode": 0,
  2964. "fromCache": true,
  2965. "hasPendingWrites": true
  2966. }
  2967. ]
  2968. },
  2969. {
  2970. "failWrite": {
  2971. "error": {
  2972. "code": 7
  2973. },
  2974. "expectUserCallback": true
  2975. },
  2976. "expect": [
  2977. {
  2978. "query": {
  2979. "path": "collection",
  2980. "filters": [],
  2981. "orderBys": []
  2982. },
  2983. "removed": [
  2984. [
  2985. "collection/a14",
  2986. 0,
  2987. {
  2988. "v": 1
  2989. },
  2990. "local"
  2991. ]
  2992. ],
  2993. "errorCode": 0,
  2994. "fromCache": true,
  2995. "hasPendingWrites": false
  2996. }
  2997. ],
  2998. "stateExpect": {
  2999. "numOutstandingWrites": 0
  3000. }
  3001. }
  3002. ]
  3003. },
  3004. "Failed writes are released immediately.": {
  3005. "describeName": "Writes:",
  3006. "itName": "Failed writes are released immediately.",
  3007. "tags": [],
  3008. "config": {
  3009. "useGarbageCollection": true
  3010. },
  3011. "steps": [
  3012. {
  3013. "userListen": [
  3014. 2,
  3015. {
  3016. "path": "collection",
  3017. "filters": [],
  3018. "orderBys": []
  3019. }
  3020. ],
  3021. "stateExpect": {
  3022. "activeTargets": {
  3023. "2": {
  3024. "query": {
  3025. "path": "collection",
  3026. "filters": [],
  3027. "orderBys": []
  3028. },
  3029. "resumeToken": ""
  3030. }
  3031. }
  3032. }
  3033. },
  3034. {
  3035. "watchAck": [
  3036. 2
  3037. ]
  3038. },
  3039. {
  3040. "watchEntity": {
  3041. "docs": [
  3042. [
  3043. "collection/a",
  3044. 1000,
  3045. {
  3046. "v": 1
  3047. }
  3048. ]
  3049. ],
  3050. "targets": [
  3051. 2
  3052. ]
  3053. }
  3054. },
  3055. {
  3056. "watchCurrent": [
  3057. [
  3058. 2
  3059. ],
  3060. "resume-token-1000"
  3061. ],
  3062. "watchSnapshot": 1000,
  3063. "expect": [
  3064. {
  3065. "query": {
  3066. "path": "collection",
  3067. "filters": [],
  3068. "orderBys": []
  3069. },
  3070. "added": [
  3071. [
  3072. "collection/a",
  3073. 1000,
  3074. {
  3075. "v": 1
  3076. }
  3077. ]
  3078. ],
  3079. "errorCode": 0,
  3080. "fromCache": false,
  3081. "hasPendingWrites": false
  3082. }
  3083. ]
  3084. },
  3085. {
  3086. "userSet": [
  3087. "collection/b",
  3088. {
  3089. "v": 1
  3090. }
  3091. ],
  3092. "expect": [
  3093. {
  3094. "query": {
  3095. "path": "collection",
  3096. "filters": [],
  3097. "orderBys": []
  3098. },
  3099. "added": [
  3100. [
  3101. "collection/b",
  3102. 0,
  3103. {
  3104. "v": 1
  3105. },
  3106. "local"
  3107. ]
  3108. ],
  3109. "errorCode": 0,
  3110. "fromCache": false,
  3111. "hasPendingWrites": true
  3112. }
  3113. ]
  3114. },
  3115. {
  3116. "writeAck": {
  3117. "version": 2000,
  3118. "expectUserCallback": true
  3119. }
  3120. },
  3121. {
  3122. "userSet": [
  3123. "collection/a",
  3124. {
  3125. "v": 2
  3126. }
  3127. ],
  3128. "expect": [
  3129. {
  3130. "query": {
  3131. "path": "collection",
  3132. "filters": [],
  3133. "orderBys": []
  3134. },
  3135. "modified": [
  3136. [
  3137. "collection/a",
  3138. 1000,
  3139. {
  3140. "v": 2
  3141. },
  3142. "local"
  3143. ]
  3144. ],
  3145. "errorCode": 0,
  3146. "fromCache": false,
  3147. "hasPendingWrites": true
  3148. }
  3149. ]
  3150. },
  3151. {
  3152. "failWrite": {
  3153. "error": {
  3154. "code": 7
  3155. },
  3156. "expectUserCallback": true
  3157. },
  3158. "expect": [
  3159. {
  3160. "query": {
  3161. "path": "collection",
  3162. "filters": [],
  3163. "orderBys": []
  3164. },
  3165. "modified": [
  3166. [
  3167. "collection/a",
  3168. 1000,
  3169. {
  3170. "v": 1
  3171. }
  3172. ]
  3173. ],
  3174. "errorCode": 0,
  3175. "fromCache": false,
  3176. "hasPendingWrites": true
  3177. }
  3178. ]
  3179. },
  3180. {
  3181. "watchEntity": {
  3182. "docs": [
  3183. [
  3184. "collection/b",
  3185. 2000,
  3186. {
  3187. "v": 1
  3188. }
  3189. ]
  3190. ],
  3191. "targets": [
  3192. 2
  3193. ]
  3194. },
  3195. "watchSnapshot": 2000,
  3196. "expect": [
  3197. {
  3198. "query": {
  3199. "path": "collection",
  3200. "filters": [],
  3201. "orderBys": []
  3202. },
  3203. "metadata": [
  3204. [
  3205. "collection/b",
  3206. 2000,
  3207. {
  3208. "v": 1
  3209. }
  3210. ]
  3211. ],
  3212. "errorCode": 0,
  3213. "fromCache": false,
  3214. "hasPendingWrites": false
  3215. }
  3216. ]
  3217. }
  3218. ]
  3219. },
  3220. "Held writes are not re-sent.": {
  3221. "describeName": "Writes:",
  3222. "itName": "Held writes are not re-sent.",
  3223. "tags": [],
  3224. "config": {
  3225. "useGarbageCollection": true
  3226. },
  3227. "steps": [
  3228. {
  3229. "userListen": [
  3230. 2,
  3231. {
  3232. "path": "collection",
  3233. "filters": [],
  3234. "orderBys": []
  3235. }
  3236. ],
  3237. "stateExpect": {
  3238. "activeTargets": {
  3239. "2": {
  3240. "query": {
  3241. "path": "collection",
  3242. "filters": [],
  3243. "orderBys": []
  3244. },
  3245. "resumeToken": ""
  3246. }
  3247. }
  3248. }
  3249. },
  3250. {
  3251. "watchAck": [
  3252. 2
  3253. ]
  3254. },
  3255. {
  3256. "watchEntity": {
  3257. "docs": [],
  3258. "targets": [
  3259. 2
  3260. ]
  3261. }
  3262. },
  3263. {
  3264. "watchCurrent": [
  3265. [
  3266. 2
  3267. ],
  3268. "resume-token-500"
  3269. ],
  3270. "watchSnapshot": 500,
  3271. "expect": [
  3272. {
  3273. "query": {
  3274. "path": "collection",
  3275. "filters": [],
  3276. "orderBys": []
  3277. },
  3278. "errorCode": 0,
  3279. "fromCache": false,
  3280. "hasPendingWrites": false
  3281. }
  3282. ]
  3283. },
  3284. {
  3285. "userSet": [
  3286. "collection/a",
  3287. {
  3288. "v": 1
  3289. }
  3290. ],
  3291. "expect": [
  3292. {
  3293. "query": {
  3294. "path": "collection",
  3295. "filters": [],
  3296. "orderBys": []
  3297. },
  3298. "added": [
  3299. [
  3300. "collection/a",
  3301. 0,
  3302. {
  3303. "v": 1
  3304. },
  3305. "local"
  3306. ]
  3307. ],
  3308. "errorCode": 0,
  3309. "fromCache": false,
  3310. "hasPendingWrites": true
  3311. }
  3312. ]
  3313. },
  3314. {
  3315. "writeAck": {
  3316. "version": 1000,
  3317. "expectUserCallback": true
  3318. }
  3319. },
  3320. {
  3321. "userSet": [
  3322. "collection/b",
  3323. {
  3324. "v": 1
  3325. }
  3326. ],
  3327. "expect": [
  3328. {
  3329. "query": {
  3330. "path": "collection",
  3331. "filters": [],
  3332. "orderBys": []
  3333. },
  3334. "added": [
  3335. [
  3336. "collection/b",
  3337. 0,
  3338. {
  3339. "v": 1
  3340. },
  3341. "local"
  3342. ]
  3343. ],
  3344. "errorCode": 0,
  3345. "fromCache": false,
  3346. "hasPendingWrites": true
  3347. }
  3348. ]
  3349. },
  3350. {
  3351. "writeAck": {
  3352. "version": 2000,
  3353. "expectUserCallback": true
  3354. }
  3355. },
  3356. {
  3357. "watchEntity": {
  3358. "docs": [
  3359. [
  3360. "collection/a",
  3361. 1000,
  3362. {
  3363. "v": 1
  3364. }
  3365. ],
  3366. [
  3367. "collection/b",
  3368. 2000,
  3369. {
  3370. "v": 1
  3371. }
  3372. ]
  3373. ],
  3374. "targets": [
  3375. 2
  3376. ]
  3377. },
  3378. "watchSnapshot": 2000,
  3379. "expect": [
  3380. {
  3381. "query": {
  3382. "path": "collection",
  3383. "filters": [],
  3384. "orderBys": []
  3385. },
  3386. "metadata": [
  3387. [
  3388. "collection/a",
  3389. 1000,
  3390. {
  3391. "v": 1
  3392. }
  3393. ],
  3394. [
  3395. "collection/b",
  3396. 2000,
  3397. {
  3398. "v": 1
  3399. }
  3400. ]
  3401. ],
  3402. "errorCode": 0,
  3403. "fromCache": false,
  3404. "hasPendingWrites": false
  3405. }
  3406. ]
  3407. }
  3408. ]
  3409. },
  3410. "Held writes are not re-sent after disable/enable network.": {
  3411. "describeName": "Writes:",
  3412. "itName": "Held writes are not re-sent after disable/enable network.",
  3413. "tags": [],
  3414. "config": {
  3415. "useGarbageCollection": true
  3416. },
  3417. "steps": [
  3418. {
  3419. "userListen": [
  3420. 2,
  3421. {
  3422. "path": "collection",
  3423. "filters": [],
  3424. "orderBys": []
  3425. }
  3426. ],
  3427. "stateExpect": {
  3428. "activeTargets": {
  3429. "2": {
  3430. "query": {
  3431. "path": "collection",
  3432. "filters": [],
  3433. "orderBys": []
  3434. },
  3435. "resumeToken": ""
  3436. }
  3437. }
  3438. }
  3439. },
  3440. {
  3441. "watchAck": [
  3442. 2
  3443. ]
  3444. },
  3445. {
  3446. "watchEntity": {
  3447. "docs": [],
  3448. "targets": [
  3449. 2
  3450. ]
  3451. }
  3452. },
  3453. {
  3454. "watchCurrent": [
  3455. [
  3456. 2
  3457. ],
  3458. "resume-token-500"
  3459. ],
  3460. "watchSnapshot": 500,
  3461. "expect": [
  3462. {
  3463. "query": {
  3464. "path": "collection",
  3465. "filters": [],
  3466. "orderBys": []
  3467. },
  3468. "errorCode": 0,
  3469. "fromCache": false,
  3470. "hasPendingWrites": false
  3471. }
  3472. ]
  3473. },
  3474. {
  3475. "userSet": [
  3476. "collection/a",
  3477. {
  3478. "v": 1
  3479. }
  3480. ],
  3481. "expect": [
  3482. {
  3483. "query": {
  3484. "path": "collection",
  3485. "filters": [],
  3486. "orderBys": []
  3487. },
  3488. "added": [
  3489. [
  3490. "collection/a",
  3491. 0,
  3492. {
  3493. "v": 1
  3494. },
  3495. "local"
  3496. ]
  3497. ],
  3498. "errorCode": 0,
  3499. "fromCache": false,
  3500. "hasPendingWrites": true
  3501. }
  3502. ]
  3503. },
  3504. {
  3505. "writeAck": {
  3506. "version": 1000,
  3507. "expectUserCallback": true
  3508. },
  3509. "stateExpect": {
  3510. "writeStreamRequestCount": 2
  3511. }
  3512. },
  3513. {
  3514. "enableNetwork": false,
  3515. "stateExpect": {
  3516. "activeTargets": {},
  3517. "limboDocs": [],
  3518. "writeStreamRequestCount": 3
  3519. },
  3520. "expect": [
  3521. {
  3522. "query": {
  3523. "path": "collection",
  3524. "filters": [],
  3525. "orderBys": []
  3526. },
  3527. "errorCode": 0,
  3528. "fromCache": true,
  3529. "hasPendingWrites": true
  3530. }
  3531. ]
  3532. },
  3533. {
  3534. "enableNetwork": true,
  3535. "stateExpect": {
  3536. "activeTargets": {
  3537. "2": {
  3538. "query": {
  3539. "path": "collection",
  3540. "filters": [],
  3541. "orderBys": []
  3542. },
  3543. "resumeToken": "resume-token-500"
  3544. }
  3545. },
  3546. "writeStreamRequestCount": 3
  3547. }
  3548. },
  3549. {
  3550. "watchAck": [
  3551. 2
  3552. ]
  3553. },
  3554. {
  3555. "watchEntity": {
  3556. "docs": [
  3557. [
  3558. "collection/a",
  3559. 1000,
  3560. {
  3561. "v": 1
  3562. }
  3563. ]
  3564. ],
  3565. "targets": [
  3566. 2
  3567. ]
  3568. }
  3569. },
  3570. {
  3571. "watchCurrent": [
  3572. [
  3573. 2
  3574. ],
  3575. "resume-token-2000"
  3576. ],
  3577. "watchSnapshot": 2000,
  3578. "expect": [
  3579. {
  3580. "query": {
  3581. "path": "collection",
  3582. "filters": [],
  3583. "orderBys": []
  3584. },
  3585. "metadata": [
  3586. [
  3587. "collection/a",
  3588. 1000,
  3589. {
  3590. "v": 1
  3591. }
  3592. ]
  3593. ],
  3594. "errorCode": 0,
  3595. "fromCache": false,
  3596. "hasPendingWrites": false
  3597. }
  3598. ]
  3599. }
  3600. ]
  3601. },
  3602. "Held writes are released when there are no queries left.": {
  3603. "describeName": "Writes:",
  3604. "itName": "Held writes are released when there are no queries left.",
  3605. "tags": [],
  3606. "config": {
  3607. "useGarbageCollection": true
  3608. },
  3609. "steps": [
  3610. {
  3611. "userListen": [
  3612. 2,
  3613. {
  3614. "path": "collection",
  3615. "filters": [],
  3616. "orderBys": []
  3617. }
  3618. ],
  3619. "stateExpect": {
  3620. "activeTargets": {
  3621. "2": {
  3622. "query": {
  3623. "path": "collection",
  3624. "filters": [],
  3625. "orderBys": []
  3626. },
  3627. "resumeToken": ""
  3628. }
  3629. }
  3630. }
  3631. },
  3632. {
  3633. "watchAck": [
  3634. 2
  3635. ]
  3636. },
  3637. {
  3638. "watchEntity": {
  3639. "docs": [],
  3640. "targets": [
  3641. 2
  3642. ]
  3643. }
  3644. },
  3645. {
  3646. "watchCurrent": [
  3647. [
  3648. 2
  3649. ],
  3650. "resume-token-500"
  3651. ],
  3652. "watchSnapshot": 500,
  3653. "expect": [
  3654. {
  3655. "query": {
  3656. "path": "collection",
  3657. "filters": [],
  3658. "orderBys": []
  3659. },
  3660. "errorCode": 0,
  3661. "fromCache": false,
  3662. "hasPendingWrites": false
  3663. }
  3664. ]
  3665. },
  3666. {
  3667. "userSet": [
  3668. "collection/a",
  3669. {
  3670. "v": 1
  3671. }
  3672. ],
  3673. "expect": [
  3674. {
  3675. "query": {
  3676. "path": "collection",
  3677. "filters": [],
  3678. "orderBys": []
  3679. },
  3680. "added": [
  3681. [
  3682. "collection/a",
  3683. 0,
  3684. {
  3685. "v": 1
  3686. },
  3687. "local"
  3688. ]
  3689. ],
  3690. "errorCode": 0,
  3691. "fromCache": false,
  3692. "hasPendingWrites": true
  3693. }
  3694. ]
  3695. },
  3696. {
  3697. "writeAck": {
  3698. "version": 1000,
  3699. "expectUserCallback": true
  3700. }
  3701. },
  3702. {
  3703. "userUnlisten": [
  3704. 2,
  3705. {
  3706. "path": "collection",
  3707. "filters": [],
  3708. "orderBys": []
  3709. }
  3710. ],
  3711. "stateExpect": {
  3712. "activeTargets": {}
  3713. }
  3714. },
  3715. {
  3716. "userListen": [
  3717. 4,
  3718. {
  3719. "path": "collection",
  3720. "filters": [],
  3721. "orderBys": []
  3722. }
  3723. ],
  3724. "stateExpect": {
  3725. "activeTargets": {
  3726. "4": {
  3727. "query": {
  3728. "path": "collection",
  3729. "filters": [],
  3730. "orderBys": []
  3731. },
  3732. "resumeToken": ""
  3733. }
  3734. }
  3735. }
  3736. }
  3737. ]
  3738. },
  3739. "Writes that fail with code invalid-argument are rejected": {
  3740. "describeName": "Writes:",
  3741. "itName": "Writes that fail with code invalid-argument are rejected",
  3742. "tags": [],
  3743. "config": {
  3744. "useGarbageCollection": true
  3745. },
  3746. "steps": [
  3747. {
  3748. "userListen": [
  3749. 2,
  3750. {
  3751. "path": "collection/key",
  3752. "filters": [],
  3753. "orderBys": []
  3754. }
  3755. ],
  3756. "stateExpect": {
  3757. "activeTargets": {
  3758. "2": {
  3759. "query": {
  3760. "path": "collection/key",
  3761. "filters": [],
  3762. "orderBys": []
  3763. },
  3764. "resumeToken": ""
  3765. }
  3766. }
  3767. }
  3768. },
  3769. {
  3770. "userSet": [
  3771. "collection/key",
  3772. {
  3773. "foo": "bar"
  3774. }
  3775. ],
  3776. "expect": [
  3777. {
  3778. "query": {
  3779. "path": "collection/key",
  3780. "filters": [],
  3781. "orderBys": []
  3782. },
  3783. "added": [
  3784. [
  3785. "collection/key",
  3786. 0,
  3787. {
  3788. "foo": "bar"
  3789. },
  3790. "local"
  3791. ]
  3792. ],
  3793. "errorCode": 0,
  3794. "fromCache": true,
  3795. "hasPendingWrites": true
  3796. }
  3797. ]
  3798. },
  3799. {
  3800. "failWrite": {
  3801. "error": {
  3802. "code": 3
  3803. },
  3804. "expectUserCallback": true
  3805. },
  3806. "expect": [
  3807. {
  3808. "query": {
  3809. "path": "collection/key",
  3810. "filters": [],
  3811. "orderBys": []
  3812. },
  3813. "removed": [
  3814. [
  3815. "collection/key",
  3816. 0,
  3817. {
  3818. "foo": "bar"
  3819. },
  3820. "local"
  3821. ]
  3822. ],
  3823. "errorCode": 0,
  3824. "fromCache": true,
  3825. "hasPendingWrites": false
  3826. }
  3827. ]
  3828. }
  3829. ]
  3830. },
  3831. "Writes that fail with code not-found are rejected": {
  3832. "describeName": "Writes:",
  3833. "itName": "Writes that fail with code not-found are rejected",
  3834. "tags": [],
  3835. "config": {
  3836. "useGarbageCollection": true
  3837. },
  3838. "steps": [
  3839. {
  3840. "userListen": [
  3841. 2,
  3842. {
  3843. "path": "collection/key",
  3844. "filters": [],
  3845. "orderBys": []
  3846. }
  3847. ],
  3848. "stateExpect": {
  3849. "activeTargets": {
  3850. "2": {
  3851. "query": {
  3852. "path": "collection/key",
  3853. "filters": [],
  3854. "orderBys": []
  3855. },
  3856. "resumeToken": ""
  3857. }
  3858. }
  3859. }
  3860. },
  3861. {
  3862. "userSet": [
  3863. "collection/key",
  3864. {
  3865. "foo": "bar"
  3866. }
  3867. ],
  3868. "expect": [
  3869. {
  3870. "query": {
  3871. "path": "collection/key",
  3872. "filters": [],
  3873. "orderBys": []
  3874. },
  3875. "added": [
  3876. [
  3877. "collection/key",
  3878. 0,
  3879. {
  3880. "foo": "bar"
  3881. },
  3882. "local"
  3883. ]
  3884. ],
  3885. "errorCode": 0,
  3886. "fromCache": true,
  3887. "hasPendingWrites": true
  3888. }
  3889. ]
  3890. },
  3891. {
  3892. "failWrite": {
  3893. "error": {
  3894. "code": 5
  3895. },
  3896. "expectUserCallback": true
  3897. },
  3898. "expect": [
  3899. {
  3900. "query": {
  3901. "path": "collection/key",
  3902. "filters": [],
  3903. "orderBys": []
  3904. },
  3905. "removed": [
  3906. [
  3907. "collection/key",
  3908. 0,
  3909. {
  3910. "foo": "bar"
  3911. },
  3912. "local"
  3913. ]
  3914. ],
  3915. "errorCode": 0,
  3916. "fromCache": true,
  3917. "hasPendingWrites": false
  3918. }
  3919. ]
  3920. }
  3921. ]
  3922. },
  3923. "Writes that fail with code already-exists are rejected": {
  3924. "describeName": "Writes:",
  3925. "itName": "Writes that fail with code already-exists are rejected",
  3926. "tags": [],
  3927. "config": {
  3928. "useGarbageCollection": true
  3929. },
  3930. "steps": [
  3931. {
  3932. "userListen": [
  3933. 2,
  3934. {
  3935. "path": "collection/key",
  3936. "filters": [],
  3937. "orderBys": []
  3938. }
  3939. ],
  3940. "stateExpect": {
  3941. "activeTargets": {
  3942. "2": {
  3943. "query": {
  3944. "path": "collection/key",
  3945. "filters": [],
  3946. "orderBys": []
  3947. },
  3948. "resumeToken": ""
  3949. }
  3950. }
  3951. }
  3952. },
  3953. {
  3954. "userSet": [
  3955. "collection/key",
  3956. {
  3957. "foo": "bar"
  3958. }
  3959. ],
  3960. "expect": [
  3961. {
  3962. "query": {
  3963. "path": "collection/key",
  3964. "filters": [],
  3965. "orderBys": []
  3966. },
  3967. "added": [
  3968. [
  3969. "collection/key",
  3970. 0,
  3971. {
  3972. "foo": "bar"
  3973. },
  3974. "local"
  3975. ]
  3976. ],
  3977. "errorCode": 0,
  3978. "fromCache": true,
  3979. "hasPendingWrites": true
  3980. }
  3981. ]
  3982. },
  3983. {
  3984. "failWrite": {
  3985. "error": {
  3986. "code": 6
  3987. },
  3988. "expectUserCallback": true
  3989. },
  3990. "expect": [
  3991. {
  3992. "query": {
  3993. "path": "collection/key",
  3994. "filters": [],
  3995. "orderBys": []
  3996. },
  3997. "removed": [
  3998. [
  3999. "collection/key",
  4000. 0,
  4001. {
  4002. "foo": "bar"
  4003. },
  4004. "local"
  4005. ]
  4006. ],
  4007. "errorCode": 0,
  4008. "fromCache": true,
  4009. "hasPendingWrites": false
  4010. }
  4011. ]
  4012. }
  4013. ]
  4014. },
  4015. "Writes that fail with code permission-denied are rejected": {
  4016. "describeName": "Writes:",
  4017. "itName": "Writes that fail with code permission-denied are rejected",
  4018. "tags": [],
  4019. "config": {
  4020. "useGarbageCollection": true
  4021. },
  4022. "steps": [
  4023. {
  4024. "userListen": [
  4025. 2,
  4026. {
  4027. "path": "collection/key",
  4028. "filters": [],
  4029. "orderBys": []
  4030. }
  4031. ],
  4032. "stateExpect": {
  4033. "activeTargets": {
  4034. "2": {
  4035. "query": {
  4036. "path": "collection/key",
  4037. "filters": [],
  4038. "orderBys": []
  4039. },
  4040. "resumeToken": ""
  4041. }
  4042. }
  4043. }
  4044. },
  4045. {
  4046. "userSet": [
  4047. "collection/key",
  4048. {
  4049. "foo": "bar"
  4050. }
  4051. ],
  4052. "expect": [
  4053. {
  4054. "query": {
  4055. "path": "collection/key",
  4056. "filters": [],
  4057. "orderBys": []
  4058. },
  4059. "added": [
  4060. [
  4061. "collection/key",
  4062. 0,
  4063. {
  4064. "foo": "bar"
  4065. },
  4066. "local"
  4067. ]
  4068. ],
  4069. "errorCode": 0,
  4070. "fromCache": true,
  4071. "hasPendingWrites": true
  4072. }
  4073. ]
  4074. },
  4075. {
  4076. "failWrite": {
  4077. "error": {
  4078. "code": 7
  4079. },
  4080. "expectUserCallback": true
  4081. },
  4082. "expect": [
  4083. {
  4084. "query": {
  4085. "path": "collection/key",
  4086. "filters": [],
  4087. "orderBys": []
  4088. },
  4089. "removed": [
  4090. [
  4091. "collection/key",
  4092. 0,
  4093. {
  4094. "foo": "bar"
  4095. },
  4096. "local"
  4097. ]
  4098. ],
  4099. "errorCode": 0,
  4100. "fromCache": true,
  4101. "hasPendingWrites": false
  4102. }
  4103. ]
  4104. }
  4105. ]
  4106. },
  4107. "Writes that fail with code failed-precondition are rejected": {
  4108. "describeName": "Writes:",
  4109. "itName": "Writes that fail with code failed-precondition are rejected",
  4110. "tags": [],
  4111. "config": {
  4112. "useGarbageCollection": true
  4113. },
  4114. "steps": [
  4115. {
  4116. "userListen": [
  4117. 2,
  4118. {
  4119. "path": "collection/key",
  4120. "filters": [],
  4121. "orderBys": []
  4122. }
  4123. ],
  4124. "stateExpect": {
  4125. "activeTargets": {
  4126. "2": {
  4127. "query": {
  4128. "path": "collection/key",
  4129. "filters": [],
  4130. "orderBys": []
  4131. },
  4132. "resumeToken": ""
  4133. }
  4134. }
  4135. }
  4136. },
  4137. {
  4138. "userSet": [
  4139. "collection/key",
  4140. {
  4141. "foo": "bar"
  4142. }
  4143. ],
  4144. "expect": [
  4145. {
  4146. "query": {
  4147. "path": "collection/key",
  4148. "filters": [],
  4149. "orderBys": []
  4150. },
  4151. "added": [
  4152. [
  4153. "collection/key",
  4154. 0,
  4155. {
  4156. "foo": "bar"
  4157. },
  4158. "local"
  4159. ]
  4160. ],
  4161. "errorCode": 0,
  4162. "fromCache": true,
  4163. "hasPendingWrites": true
  4164. }
  4165. ]
  4166. },
  4167. {
  4168. "failWrite": {
  4169. "error": {
  4170. "code": 9
  4171. },
  4172. "expectUserCallback": true
  4173. },
  4174. "expect": [
  4175. {
  4176. "query": {
  4177. "path": "collection/key",
  4178. "filters": [],
  4179. "orderBys": []
  4180. },
  4181. "removed": [
  4182. [
  4183. "collection/key",
  4184. 0,
  4185. {
  4186. "foo": "bar"
  4187. },
  4188. "local"
  4189. ]
  4190. ],
  4191. "errorCode": 0,
  4192. "fromCache": true,
  4193. "hasPendingWrites": false
  4194. }
  4195. ]
  4196. }
  4197. ]
  4198. },
  4199. "Writes that fail with code aborted are rejected": {
  4200. "describeName": "Writes:",
  4201. "itName": "Writes that fail with code aborted are rejected",
  4202. "tags": [],
  4203. "config": {
  4204. "useGarbageCollection": true
  4205. },
  4206. "steps": [
  4207. {
  4208. "userListen": [
  4209. 2,
  4210. {
  4211. "path": "collection/key",
  4212. "filters": [],
  4213. "orderBys": []
  4214. }
  4215. ],
  4216. "stateExpect": {
  4217. "activeTargets": {
  4218. "2": {
  4219. "query": {
  4220. "path": "collection/key",
  4221. "filters": [],
  4222. "orderBys": []
  4223. },
  4224. "resumeToken": ""
  4225. }
  4226. }
  4227. }
  4228. },
  4229. {
  4230. "userSet": [
  4231. "collection/key",
  4232. {
  4233. "foo": "bar"
  4234. }
  4235. ],
  4236. "expect": [
  4237. {
  4238. "query": {
  4239. "path": "collection/key",
  4240. "filters": [],
  4241. "orderBys": []
  4242. },
  4243. "added": [
  4244. [
  4245. "collection/key",
  4246. 0,
  4247. {
  4248. "foo": "bar"
  4249. },
  4250. "local"
  4251. ]
  4252. ],
  4253. "errorCode": 0,
  4254. "fromCache": true,
  4255. "hasPendingWrites": true
  4256. }
  4257. ]
  4258. },
  4259. {
  4260. "failWrite": {
  4261. "error": {
  4262. "code": 10
  4263. },
  4264. "expectUserCallback": true
  4265. },
  4266. "expect": [
  4267. {
  4268. "query": {
  4269. "path": "collection/key",
  4270. "filters": [],
  4271. "orderBys": []
  4272. },
  4273. "removed": [
  4274. [
  4275. "collection/key",
  4276. 0,
  4277. {
  4278. "foo": "bar"
  4279. },
  4280. "local"
  4281. ]
  4282. ],
  4283. "errorCode": 0,
  4284. "fromCache": true,
  4285. "hasPendingWrites": false
  4286. }
  4287. ]
  4288. }
  4289. ]
  4290. },
  4291. "Writes that fail with code out-of-range are rejected": {
  4292. "describeName": "Writes:",
  4293. "itName": "Writes that fail with code out-of-range are rejected",
  4294. "tags": [],
  4295. "config": {
  4296. "useGarbageCollection": true
  4297. },
  4298. "steps": [
  4299. {
  4300. "userListen": [
  4301. 2,
  4302. {
  4303. "path": "collection/key",
  4304. "filters": [],
  4305. "orderBys": []
  4306. }
  4307. ],
  4308. "stateExpect": {
  4309. "activeTargets": {
  4310. "2": {
  4311. "query": {
  4312. "path": "collection/key",
  4313. "filters": [],
  4314. "orderBys": []
  4315. },
  4316. "resumeToken": ""
  4317. }
  4318. }
  4319. }
  4320. },
  4321. {
  4322. "userSet": [
  4323. "collection/key",
  4324. {
  4325. "foo": "bar"
  4326. }
  4327. ],
  4328. "expect": [
  4329. {
  4330. "query": {
  4331. "path": "collection/key",
  4332. "filters": [],
  4333. "orderBys": []
  4334. },
  4335. "added": [
  4336. [
  4337. "collection/key",
  4338. 0,
  4339. {
  4340. "foo": "bar"
  4341. },
  4342. "local"
  4343. ]
  4344. ],
  4345. "errorCode": 0,
  4346. "fromCache": true,
  4347. "hasPendingWrites": true
  4348. }
  4349. ]
  4350. },
  4351. {
  4352. "failWrite": {
  4353. "error": {
  4354. "code": 11
  4355. },
  4356. "expectUserCallback": true
  4357. },
  4358. "expect": [
  4359. {
  4360. "query": {
  4361. "path": "collection/key",
  4362. "filters": [],
  4363. "orderBys": []
  4364. },
  4365. "removed": [
  4366. [
  4367. "collection/key",
  4368. 0,
  4369. {
  4370. "foo": "bar"
  4371. },
  4372. "local"
  4373. ]
  4374. ],
  4375. "errorCode": 0,
  4376. "fromCache": true,
  4377. "hasPendingWrites": false
  4378. }
  4379. ]
  4380. }
  4381. ]
  4382. },
  4383. "Writes that fail with code unimplemented are rejected": {
  4384. "describeName": "Writes:",
  4385. "itName": "Writes that fail with code unimplemented are rejected",
  4386. "tags": [],
  4387. "config": {
  4388. "useGarbageCollection": true
  4389. },
  4390. "steps": [
  4391. {
  4392. "userListen": [
  4393. 2,
  4394. {
  4395. "path": "collection/key",
  4396. "filters": [],
  4397. "orderBys": []
  4398. }
  4399. ],
  4400. "stateExpect": {
  4401. "activeTargets": {
  4402. "2": {
  4403. "query": {
  4404. "path": "collection/key",
  4405. "filters": [],
  4406. "orderBys": []
  4407. },
  4408. "resumeToken": ""
  4409. }
  4410. }
  4411. }
  4412. },
  4413. {
  4414. "userSet": [
  4415. "collection/key",
  4416. {
  4417. "foo": "bar"
  4418. }
  4419. ],
  4420. "expect": [
  4421. {
  4422. "query": {
  4423. "path": "collection/key",
  4424. "filters": [],
  4425. "orderBys": []
  4426. },
  4427. "added": [
  4428. [
  4429. "collection/key",
  4430. 0,
  4431. {
  4432. "foo": "bar"
  4433. },
  4434. "local"
  4435. ]
  4436. ],
  4437. "errorCode": 0,
  4438. "fromCache": true,
  4439. "hasPendingWrites": true
  4440. }
  4441. ]
  4442. },
  4443. {
  4444. "failWrite": {
  4445. "error": {
  4446. "code": 12
  4447. },
  4448. "expectUserCallback": true
  4449. },
  4450. "expect": [
  4451. {
  4452. "query": {
  4453. "path": "collection/key",
  4454. "filters": [],
  4455. "orderBys": []
  4456. },
  4457. "removed": [
  4458. [
  4459. "collection/key",
  4460. 0,
  4461. {
  4462. "foo": "bar"
  4463. },
  4464. "local"
  4465. ]
  4466. ],
  4467. "errorCode": 0,
  4468. "fromCache": true,
  4469. "hasPendingWrites": false
  4470. }
  4471. ]
  4472. }
  4473. ]
  4474. },
  4475. "Writes that fail with code data-loss are rejected": {
  4476. "describeName": "Writes:",
  4477. "itName": "Writes that fail with code data-loss are rejected",
  4478. "tags": [],
  4479. "config": {
  4480. "useGarbageCollection": true
  4481. },
  4482. "steps": [
  4483. {
  4484. "userListen": [
  4485. 2,
  4486. {
  4487. "path": "collection/key",
  4488. "filters": [],
  4489. "orderBys": []
  4490. }
  4491. ],
  4492. "stateExpect": {
  4493. "activeTargets": {
  4494. "2": {
  4495. "query": {
  4496. "path": "collection/key",
  4497. "filters": [],
  4498. "orderBys": []
  4499. },
  4500. "resumeToken": ""
  4501. }
  4502. }
  4503. }
  4504. },
  4505. {
  4506. "userSet": [
  4507. "collection/key",
  4508. {
  4509. "foo": "bar"
  4510. }
  4511. ],
  4512. "expect": [
  4513. {
  4514. "query": {
  4515. "path": "collection/key",
  4516. "filters": [],
  4517. "orderBys": []
  4518. },
  4519. "added": [
  4520. [
  4521. "collection/key",
  4522. 0,
  4523. {
  4524. "foo": "bar"
  4525. },
  4526. "local"
  4527. ]
  4528. ],
  4529. "errorCode": 0,
  4530. "fromCache": true,
  4531. "hasPendingWrites": true
  4532. }
  4533. ]
  4534. },
  4535. {
  4536. "failWrite": {
  4537. "error": {
  4538. "code": 15
  4539. },
  4540. "expectUserCallback": true
  4541. },
  4542. "expect": [
  4543. {
  4544. "query": {
  4545. "path": "collection/key",
  4546. "filters": [],
  4547. "orderBys": []
  4548. },
  4549. "removed": [
  4550. [
  4551. "collection/key",
  4552. 0,
  4553. {
  4554. "foo": "bar"
  4555. },
  4556. "local"
  4557. ]
  4558. ],
  4559. "errorCode": 0,
  4560. "fromCache": true,
  4561. "hasPendingWrites": false
  4562. }
  4563. ]
  4564. }
  4565. ]
  4566. },
  4567. "Writes that fail with code resource_exhausted are not rejected": {
  4568. "describeName": "Writes:",
  4569. "itName": "Writes that fail with code resource_exhausted are not rejected",
  4570. "tags": [],
  4571. "config": {
  4572. "useGarbageCollection": true
  4573. },
  4574. "steps": [
  4575. {
  4576. "userListen": [
  4577. 2,
  4578. {
  4579. "path": "collection/key",
  4580. "filters": [],
  4581. "orderBys": []
  4582. }
  4583. ],
  4584. "stateExpect": {
  4585. "activeTargets": {
  4586. "2": {
  4587. "query": {
  4588. "path": "collection/key",
  4589. "filters": [],
  4590. "orderBys": []
  4591. },
  4592. "resumeToken": ""
  4593. }
  4594. }
  4595. }
  4596. },
  4597. {
  4598. "userSet": [
  4599. "collection/key",
  4600. {
  4601. "foo": "bar"
  4602. }
  4603. ],
  4604. "expect": [
  4605. {
  4606. "query": {
  4607. "path": "collection/key",
  4608. "filters": [],
  4609. "orderBys": []
  4610. },
  4611. "added": [
  4612. [
  4613. "collection/key",
  4614. 0,
  4615. {
  4616. "foo": "bar"
  4617. },
  4618. "local"
  4619. ]
  4620. ],
  4621. "errorCode": 0,
  4622. "fromCache": true,
  4623. "hasPendingWrites": true
  4624. }
  4625. ]
  4626. },
  4627. {
  4628. "failWrite": {
  4629. "error": {
  4630. "code": 8
  4631. },
  4632. "expectUserCallback": false
  4633. }
  4634. }
  4635. ]
  4636. },
  4637. "Writes that fail with code cancelled are retried": {
  4638. "describeName": "Writes:",
  4639. "itName": "Writes that fail with code cancelled are retried",
  4640. "tags": [],
  4641. "config": {
  4642. "useGarbageCollection": true
  4643. },
  4644. "steps": [
  4645. {
  4646. "userListen": [
  4647. 2,
  4648. {
  4649. "path": "collection/key",
  4650. "filters": [],
  4651. "orderBys": []
  4652. }
  4653. ],
  4654. "stateExpect": {
  4655. "activeTargets": {
  4656. "2": {
  4657. "query": {
  4658. "path": "collection/key",
  4659. "filters": [],
  4660. "orderBys": []
  4661. },
  4662. "resumeToken": ""
  4663. }
  4664. }
  4665. }
  4666. },
  4667. {
  4668. "userSet": [
  4669. "collection/key",
  4670. {
  4671. "foo": "bar"
  4672. }
  4673. ],
  4674. "expect": [
  4675. {
  4676. "query": {
  4677. "path": "collection/key",
  4678. "filters": [],
  4679. "orderBys": []
  4680. },
  4681. "added": [
  4682. [
  4683. "collection/key",
  4684. 0,
  4685. {
  4686. "foo": "bar"
  4687. },
  4688. "local"
  4689. ]
  4690. ],
  4691. "errorCode": 0,
  4692. "fromCache": true,
  4693. "hasPendingWrites": true
  4694. }
  4695. ]
  4696. },
  4697. {
  4698. "failWrite": {
  4699. "error": {
  4700. "code": 1
  4701. },
  4702. "expectUserCallback": false
  4703. }
  4704. },
  4705. {
  4706. "writeAck": {
  4707. "version": 1000,
  4708. "expectUserCallback": true
  4709. }
  4710. },
  4711. {
  4712. "watchAck": [
  4713. 2
  4714. ]
  4715. },
  4716. {
  4717. "watchEntity": {
  4718. "docs": [
  4719. [
  4720. "collection/key",
  4721. 0,
  4722. {
  4723. "foo": "bar"
  4724. }
  4725. ]
  4726. ],
  4727. "targets": [
  4728. 2
  4729. ]
  4730. }
  4731. },
  4732. {
  4733. "watchCurrent": [
  4734. [
  4735. 2
  4736. ],
  4737. "resume-token-1000"
  4738. ],
  4739. "watchSnapshot": 1000,
  4740. "expect": [
  4741. {
  4742. "query": {
  4743. "path": "collection/key",
  4744. "filters": [],
  4745. "orderBys": []
  4746. },
  4747. "metadata": [
  4748. [
  4749. "collection/key",
  4750. 0,
  4751. {
  4752. "foo": "bar"
  4753. }
  4754. ]
  4755. ],
  4756. "errorCode": 0,
  4757. "fromCache": false,
  4758. "hasPendingWrites": false
  4759. }
  4760. ]
  4761. }
  4762. ]
  4763. },
  4764. "Writes that fail with code unknown are retried": {
  4765. "describeName": "Writes:",
  4766. "itName": "Writes that fail with code unknown are retried",
  4767. "tags": [],
  4768. "config": {
  4769. "useGarbageCollection": true
  4770. },
  4771. "steps": [
  4772. {
  4773. "userListen": [
  4774. 2,
  4775. {
  4776. "path": "collection/key",
  4777. "filters": [],
  4778. "orderBys": []
  4779. }
  4780. ],
  4781. "stateExpect": {
  4782. "activeTargets": {
  4783. "2": {
  4784. "query": {
  4785. "path": "collection/key",
  4786. "filters": [],
  4787. "orderBys": []
  4788. },
  4789. "resumeToken": ""
  4790. }
  4791. }
  4792. }
  4793. },
  4794. {
  4795. "userSet": [
  4796. "collection/key",
  4797. {
  4798. "foo": "bar"
  4799. }
  4800. ],
  4801. "expect": [
  4802. {
  4803. "query": {
  4804. "path": "collection/key",
  4805. "filters": [],
  4806. "orderBys": []
  4807. },
  4808. "added": [
  4809. [
  4810. "collection/key",
  4811. 0,
  4812. {
  4813. "foo": "bar"
  4814. },
  4815. "local"
  4816. ]
  4817. ],
  4818. "errorCode": 0,
  4819. "fromCache": true,
  4820. "hasPendingWrites": true
  4821. }
  4822. ]
  4823. },
  4824. {
  4825. "failWrite": {
  4826. "error": {
  4827. "code": 2
  4828. },
  4829. "expectUserCallback": false
  4830. }
  4831. },
  4832. {
  4833. "writeAck": {
  4834. "version": 1000,
  4835. "expectUserCallback": true
  4836. }
  4837. },
  4838. {
  4839. "watchAck": [
  4840. 2
  4841. ]
  4842. },
  4843. {
  4844. "watchEntity": {
  4845. "docs": [
  4846. [
  4847. "collection/key",
  4848. 0,
  4849. {
  4850. "foo": "bar"
  4851. }
  4852. ]
  4853. ],
  4854. "targets": [
  4855. 2
  4856. ]
  4857. }
  4858. },
  4859. {
  4860. "watchCurrent": [
  4861. [
  4862. 2
  4863. ],
  4864. "resume-token-1000"
  4865. ],
  4866. "watchSnapshot": 1000,
  4867. "expect": [
  4868. {
  4869. "query": {
  4870. "path": "collection/key",
  4871. "filters": [],
  4872. "orderBys": []
  4873. },
  4874. "metadata": [
  4875. [
  4876. "collection/key",
  4877. 0,
  4878. {
  4879. "foo": "bar"
  4880. }
  4881. ]
  4882. ],
  4883. "errorCode": 0,
  4884. "fromCache": false,
  4885. "hasPendingWrites": false
  4886. }
  4887. ]
  4888. }
  4889. ]
  4890. },
  4891. "Writes that fail with code deadline-exceeded are retried": {
  4892. "describeName": "Writes:",
  4893. "itName": "Writes that fail with code deadline-exceeded are retried",
  4894. "tags": [],
  4895. "config": {
  4896. "useGarbageCollection": true
  4897. },
  4898. "steps": [
  4899. {
  4900. "userListen": [
  4901. 2,
  4902. {
  4903. "path": "collection/key",
  4904. "filters": [],
  4905. "orderBys": []
  4906. }
  4907. ],
  4908. "stateExpect": {
  4909. "activeTargets": {
  4910. "2": {
  4911. "query": {
  4912. "path": "collection/key",
  4913. "filters": [],
  4914. "orderBys": []
  4915. },
  4916. "resumeToken": ""
  4917. }
  4918. }
  4919. }
  4920. },
  4921. {
  4922. "userSet": [
  4923. "collection/key",
  4924. {
  4925. "foo": "bar"
  4926. }
  4927. ],
  4928. "expect": [
  4929. {
  4930. "query": {
  4931. "path": "collection/key",
  4932. "filters": [],
  4933. "orderBys": []
  4934. },
  4935. "added": [
  4936. [
  4937. "collection/key",
  4938. 0,
  4939. {
  4940. "foo": "bar"
  4941. },
  4942. "local"
  4943. ]
  4944. ],
  4945. "errorCode": 0,
  4946. "fromCache": true,
  4947. "hasPendingWrites": true
  4948. }
  4949. ]
  4950. },
  4951. {
  4952. "failWrite": {
  4953. "error": {
  4954. "code": 4
  4955. },
  4956. "expectUserCallback": false
  4957. }
  4958. },
  4959. {
  4960. "writeAck": {
  4961. "version": 1000,
  4962. "expectUserCallback": true
  4963. }
  4964. },
  4965. {
  4966. "watchAck": [
  4967. 2
  4968. ]
  4969. },
  4970. {
  4971. "watchEntity": {
  4972. "docs": [
  4973. [
  4974. "collection/key",
  4975. 0,
  4976. {
  4977. "foo": "bar"
  4978. }
  4979. ]
  4980. ],
  4981. "targets": [
  4982. 2
  4983. ]
  4984. }
  4985. },
  4986. {
  4987. "watchCurrent": [
  4988. [
  4989. 2
  4990. ],
  4991. "resume-token-1000"
  4992. ],
  4993. "watchSnapshot": 1000,
  4994. "expect": [
  4995. {
  4996. "query": {
  4997. "path": "collection/key",
  4998. "filters": [],
  4999. "orderBys": []
  5000. },
  5001. "metadata": [
  5002. [
  5003. "collection/key",
  5004. 0,
  5005. {
  5006. "foo": "bar"
  5007. }
  5008. ]
  5009. ],
  5010. "errorCode": 0,
  5011. "fromCache": false,
  5012. "hasPendingWrites": false
  5013. }
  5014. ]
  5015. }
  5016. ]
  5017. },
  5018. "Writes that fail with code internal are retried": {
  5019. "describeName": "Writes:",
  5020. "itName": "Writes that fail with code internal are retried",
  5021. "tags": [],
  5022. "config": {
  5023. "useGarbageCollection": true
  5024. },
  5025. "steps": [
  5026. {
  5027. "userListen": [
  5028. 2,
  5029. {
  5030. "path": "collection/key",
  5031. "filters": [],
  5032. "orderBys": []
  5033. }
  5034. ],
  5035. "stateExpect": {
  5036. "activeTargets": {
  5037. "2": {
  5038. "query": {
  5039. "path": "collection/key",
  5040. "filters": [],
  5041. "orderBys": []
  5042. },
  5043. "resumeToken": ""
  5044. }
  5045. }
  5046. }
  5047. },
  5048. {
  5049. "userSet": [
  5050. "collection/key",
  5051. {
  5052. "foo": "bar"
  5053. }
  5054. ],
  5055. "expect": [
  5056. {
  5057. "query": {
  5058. "path": "collection/key",
  5059. "filters": [],
  5060. "orderBys": []
  5061. },
  5062. "added": [
  5063. [
  5064. "collection/key",
  5065. 0,
  5066. {
  5067. "foo": "bar"
  5068. },
  5069. "local"
  5070. ]
  5071. ],
  5072. "errorCode": 0,
  5073. "fromCache": true,
  5074. "hasPendingWrites": true
  5075. }
  5076. ]
  5077. },
  5078. {
  5079. "failWrite": {
  5080. "error": {
  5081. "code": 13
  5082. },
  5083. "expectUserCallback": false
  5084. }
  5085. },
  5086. {
  5087. "writeAck": {
  5088. "version": 1000,
  5089. "expectUserCallback": true
  5090. }
  5091. },
  5092. {
  5093. "watchAck": [
  5094. 2
  5095. ]
  5096. },
  5097. {
  5098. "watchEntity": {
  5099. "docs": [
  5100. [
  5101. "collection/key",
  5102. 0,
  5103. {
  5104. "foo": "bar"
  5105. }
  5106. ]
  5107. ],
  5108. "targets": [
  5109. 2
  5110. ]
  5111. }
  5112. },
  5113. {
  5114. "watchCurrent": [
  5115. [
  5116. 2
  5117. ],
  5118. "resume-token-1000"
  5119. ],
  5120. "watchSnapshot": 1000,
  5121. "expect": [
  5122. {
  5123. "query": {
  5124. "path": "collection/key",
  5125. "filters": [],
  5126. "orderBys": []
  5127. },
  5128. "metadata": [
  5129. [
  5130. "collection/key",
  5131. 0,
  5132. {
  5133. "foo": "bar"
  5134. }
  5135. ]
  5136. ],
  5137. "errorCode": 0,
  5138. "fromCache": false,
  5139. "hasPendingWrites": false
  5140. }
  5141. ]
  5142. }
  5143. ]
  5144. },
  5145. "Writes that fail with code unavailable are retried": {
  5146. "describeName": "Writes:",
  5147. "itName": "Writes that fail with code unavailable are retried",
  5148. "tags": [],
  5149. "config": {
  5150. "useGarbageCollection": true
  5151. },
  5152. "steps": [
  5153. {
  5154. "userListen": [
  5155. 2,
  5156. {
  5157. "path": "collection/key",
  5158. "filters": [],
  5159. "orderBys": []
  5160. }
  5161. ],
  5162. "stateExpect": {
  5163. "activeTargets": {
  5164. "2": {
  5165. "query": {
  5166. "path": "collection/key",
  5167. "filters": [],
  5168. "orderBys": []
  5169. },
  5170. "resumeToken": ""
  5171. }
  5172. }
  5173. }
  5174. },
  5175. {
  5176. "userSet": [
  5177. "collection/key",
  5178. {
  5179. "foo": "bar"
  5180. }
  5181. ],
  5182. "expect": [
  5183. {
  5184. "query": {
  5185. "path": "collection/key",
  5186. "filters": [],
  5187. "orderBys": []
  5188. },
  5189. "added": [
  5190. [
  5191. "collection/key",
  5192. 0,
  5193. {
  5194. "foo": "bar"
  5195. },
  5196. "local"
  5197. ]
  5198. ],
  5199. "errorCode": 0,
  5200. "fromCache": true,
  5201. "hasPendingWrites": true
  5202. }
  5203. ]
  5204. },
  5205. {
  5206. "failWrite": {
  5207. "error": {
  5208. "code": 14
  5209. },
  5210. "expectUserCallback": false
  5211. }
  5212. },
  5213. {
  5214. "writeAck": {
  5215. "version": 1000,
  5216. "expectUserCallback": true
  5217. }
  5218. },
  5219. {
  5220. "watchAck": [
  5221. 2
  5222. ]
  5223. },
  5224. {
  5225. "watchEntity": {
  5226. "docs": [
  5227. [
  5228. "collection/key",
  5229. 0,
  5230. {
  5231. "foo": "bar"
  5232. }
  5233. ]
  5234. ],
  5235. "targets": [
  5236. 2
  5237. ]
  5238. }
  5239. },
  5240. {
  5241. "watchCurrent": [
  5242. [
  5243. 2
  5244. ],
  5245. "resume-token-1000"
  5246. ],
  5247. "watchSnapshot": 1000,
  5248. "expect": [
  5249. {
  5250. "query": {
  5251. "path": "collection/key",
  5252. "filters": [],
  5253. "orderBys": []
  5254. },
  5255. "metadata": [
  5256. [
  5257. "collection/key",
  5258. 0,
  5259. {
  5260. "foo": "bar"
  5261. }
  5262. ]
  5263. ],
  5264. "errorCode": 0,
  5265. "fromCache": false,
  5266. "hasPendingWrites": false
  5267. }
  5268. ]
  5269. }
  5270. ]
  5271. },
  5272. "Writes that fail with code unauthenticated are retried": {
  5273. "describeName": "Writes:",
  5274. "itName": "Writes that fail with code unauthenticated are retried",
  5275. "tags": [],
  5276. "config": {
  5277. "useGarbageCollection": true
  5278. },
  5279. "steps": [
  5280. {
  5281. "userListen": [
  5282. 2,
  5283. {
  5284. "path": "collection/key",
  5285. "filters": [],
  5286. "orderBys": []
  5287. }
  5288. ],
  5289. "stateExpect": {
  5290. "activeTargets": {
  5291. "2": {
  5292. "query": {
  5293. "path": "collection/key",
  5294. "filters": [],
  5295. "orderBys": []
  5296. },
  5297. "resumeToken": ""
  5298. }
  5299. }
  5300. }
  5301. },
  5302. {
  5303. "userSet": [
  5304. "collection/key",
  5305. {
  5306. "foo": "bar"
  5307. }
  5308. ],
  5309. "expect": [
  5310. {
  5311. "query": {
  5312. "path": "collection/key",
  5313. "filters": [],
  5314. "orderBys": []
  5315. },
  5316. "added": [
  5317. [
  5318. "collection/key",
  5319. 0,
  5320. {
  5321. "foo": "bar"
  5322. },
  5323. "local"
  5324. ]
  5325. ],
  5326. "errorCode": 0,
  5327. "fromCache": true,
  5328. "hasPendingWrites": true
  5329. }
  5330. ]
  5331. },
  5332. {
  5333. "failWrite": {
  5334. "error": {
  5335. "code": 16
  5336. },
  5337. "expectUserCallback": false
  5338. }
  5339. },
  5340. {
  5341. "writeAck": {
  5342. "version": 1000,
  5343. "expectUserCallback": true
  5344. }
  5345. },
  5346. {
  5347. "watchAck": [
  5348. 2
  5349. ]
  5350. },
  5351. {
  5352. "watchEntity": {
  5353. "docs": [
  5354. [
  5355. "collection/key",
  5356. 0,
  5357. {
  5358. "foo": "bar"
  5359. }
  5360. ]
  5361. ],
  5362. "targets": [
  5363. 2
  5364. ]
  5365. }
  5366. },
  5367. {
  5368. "watchCurrent": [
  5369. [
  5370. 2
  5371. ],
  5372. "resume-token-1000"
  5373. ],
  5374. "watchSnapshot": 1000,
  5375. "expect": [
  5376. {
  5377. "query": {
  5378. "path": "collection/key",
  5379. "filters": [],
  5380. "orderBys": []
  5381. },
  5382. "metadata": [
  5383. [
  5384. "collection/key",
  5385. 0,
  5386. {
  5387. "foo": "bar"
  5388. }
  5389. ]
  5390. ],
  5391. "errorCode": 0,
  5392. "fromCache": false,
  5393. "hasPendingWrites": false
  5394. }
  5395. ]
  5396. }
  5397. ]
  5398. },
  5399. "Ensure correct events after patching a doc (including a delete) and getting watcher events.": {
  5400. "describeName": "Writes:",
  5401. "itName": "Ensure correct events after patching a doc (including a delete) and getting watcher events.",
  5402. "tags": [],
  5403. "config": {
  5404. "useGarbageCollection": true
  5405. },
  5406. "steps": [
  5407. {
  5408. "userListen": [
  5409. 2,
  5410. {
  5411. "path": "collection/doc",
  5412. "filters": [],
  5413. "orderBys": []
  5414. }
  5415. ],
  5416. "stateExpect": {
  5417. "activeTargets": {
  5418. "2": {
  5419. "query": {
  5420. "path": "collection/doc",
  5421. "filters": [],
  5422. "orderBys": []
  5423. },
  5424. "resumeToken": ""
  5425. }
  5426. }
  5427. }
  5428. },
  5429. {
  5430. "watchAck": [
  5431. 2
  5432. ]
  5433. },
  5434. {
  5435. "watchEntity": {
  5436. "docs": [
  5437. [
  5438. "collection/doc",
  5439. 1000,
  5440. {
  5441. "a": {
  5442. "b": 2
  5443. },
  5444. "v": 1
  5445. }
  5446. ]
  5447. ],
  5448. "targets": [
  5449. 2
  5450. ]
  5451. }
  5452. },
  5453. {
  5454. "watchCurrent": [
  5455. [
  5456. 2
  5457. ],
  5458. "resume-token-500"
  5459. ],
  5460. "watchSnapshot": 500,
  5461. "expect": [
  5462. {
  5463. "query": {
  5464. "path": "collection/doc",
  5465. "filters": [],
  5466. "orderBys": []
  5467. },
  5468. "added": [
  5469. [
  5470. "collection/doc",
  5471. 1000,
  5472. {
  5473. "a": {
  5474. "b": 2
  5475. },
  5476. "v": 1
  5477. }
  5478. ]
  5479. ],
  5480. "errorCode": 0,
  5481. "fromCache": false,
  5482. "hasPendingWrites": false
  5483. }
  5484. ]
  5485. },
  5486. {
  5487. "userPatch": [
  5488. "collection/doc",
  5489. {
  5490. "v": 2,
  5491. "a.c": "<DELETE>"
  5492. }
  5493. ],
  5494. "expect": [
  5495. {
  5496. "query": {
  5497. "path": "collection/doc",
  5498. "filters": [],
  5499. "orderBys": []
  5500. },
  5501. "modified": [
  5502. [
  5503. "collection/doc",
  5504. 1000,
  5505. {
  5506. "a": {
  5507. "b": 2
  5508. },
  5509. "v": 2
  5510. },
  5511. "local"
  5512. ]
  5513. ],
  5514. "errorCode": 0,
  5515. "fromCache": false,
  5516. "hasPendingWrites": true
  5517. }
  5518. ]
  5519. },
  5520. {
  5521. "watchEntity": {
  5522. "docs": [
  5523. [
  5524. "collection/doc",
  5525. 2000,
  5526. {
  5527. "a": {
  5528. "b": 2
  5529. },
  5530. "v": 2
  5531. }
  5532. ]
  5533. ],
  5534. "targets": [
  5535. 2
  5536. ]
  5537. },
  5538. "watchSnapshot": 2000
  5539. },
  5540. {
  5541. "writeAck": {
  5542. "version": 2000,
  5543. "expectUserCallback": true
  5544. },
  5545. "expect": [
  5546. {
  5547. "query": {
  5548. "path": "collection/doc",
  5549. "filters": [],
  5550. "orderBys": []
  5551. },
  5552. "metadata": [
  5553. [
  5554. "collection/doc",
  5555. 2000,
  5556. {
  5557. "a": {
  5558. "b": 2
  5559. },
  5560. "v": 2
  5561. }
  5562. ]
  5563. ],
  5564. "errorCode": 0,
  5565. "fromCache": false,
  5566. "hasPendingWrites": false
  5567. }
  5568. ]
  5569. }
  5570. ]
  5571. },
  5572. "Writes are resent after network disconnect": {
  5573. "describeName": "Writes:",
  5574. "itName": "Writes are resent after network disconnect",
  5575. "tags": [],
  5576. "config": {
  5577. "useGarbageCollection": true
  5578. },
  5579. "steps": [
  5580. {
  5581. "userSet": [
  5582. "collection/key",
  5583. {
  5584. "foo": "bar"
  5585. }
  5586. ],
  5587. "stateExpect": {
  5588. "numOutstandingWrites": 1
  5589. }
  5590. },
  5591. {
  5592. "enableNetwork": false,
  5593. "stateExpect": {
  5594. "activeTargets": {},
  5595. "limboDocs": [],
  5596. "writeStreamRequestCount": 3
  5597. }
  5598. },
  5599. {
  5600. "enableNetwork": true,
  5601. "stateExpect": {
  5602. "writeStreamRequestCount": 5,
  5603. "numOutstandingWrites": 1
  5604. }
  5605. },
  5606. {
  5607. "writeAck": {
  5608. "version": 1,
  5609. "expectUserCallback": false
  5610. },
  5611. "stateExpect": {
  5612. "numOutstandingWrites": 0
  5613. }
  5614. }
  5615. ]
  5616. }
  5617. }