write_spec_test.json 109 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425
  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 released when there are no queries left.": {
  3411. "describeName": "Writes:",
  3412. "itName": "Held writes are released when there are no queries left.",
  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. },
  3510. {
  3511. "userUnlisten": [
  3512. 2,
  3513. {
  3514. "path": "collection",
  3515. "filters": [],
  3516. "orderBys": []
  3517. }
  3518. ],
  3519. "stateExpect": {
  3520. "activeTargets": {}
  3521. }
  3522. },
  3523. {
  3524. "userListen": [
  3525. 4,
  3526. {
  3527. "path": "collection",
  3528. "filters": [],
  3529. "orderBys": []
  3530. }
  3531. ],
  3532. "stateExpect": {
  3533. "activeTargets": {
  3534. "4": {
  3535. "query": {
  3536. "path": "collection",
  3537. "filters": [],
  3538. "orderBys": []
  3539. },
  3540. "resumeToken": ""
  3541. }
  3542. }
  3543. }
  3544. }
  3545. ]
  3546. },
  3547. "Writes that fail with code invalid-argument are rejected": {
  3548. "describeName": "Writes:",
  3549. "itName": "Writes that fail with code invalid-argument are rejected",
  3550. "tags": [],
  3551. "config": {
  3552. "useGarbageCollection": true
  3553. },
  3554. "steps": [
  3555. {
  3556. "userListen": [
  3557. 2,
  3558. {
  3559. "path": "collection/key",
  3560. "filters": [],
  3561. "orderBys": []
  3562. }
  3563. ],
  3564. "stateExpect": {
  3565. "activeTargets": {
  3566. "2": {
  3567. "query": {
  3568. "path": "collection/key",
  3569. "filters": [],
  3570. "orderBys": []
  3571. },
  3572. "resumeToken": ""
  3573. }
  3574. }
  3575. }
  3576. },
  3577. {
  3578. "userSet": [
  3579. "collection/key",
  3580. {
  3581. "foo": "bar"
  3582. }
  3583. ],
  3584. "expect": [
  3585. {
  3586. "query": {
  3587. "path": "collection/key",
  3588. "filters": [],
  3589. "orderBys": []
  3590. },
  3591. "added": [
  3592. [
  3593. "collection/key",
  3594. 0,
  3595. {
  3596. "foo": "bar"
  3597. },
  3598. "local"
  3599. ]
  3600. ],
  3601. "errorCode": 0,
  3602. "fromCache": true,
  3603. "hasPendingWrites": true
  3604. }
  3605. ]
  3606. },
  3607. {
  3608. "failWrite": {
  3609. "error": {
  3610. "code": 3
  3611. },
  3612. "expectUserCallback": true
  3613. },
  3614. "expect": [
  3615. {
  3616. "query": {
  3617. "path": "collection/key",
  3618. "filters": [],
  3619. "orderBys": []
  3620. },
  3621. "removed": [
  3622. [
  3623. "collection/key",
  3624. 0,
  3625. {
  3626. "foo": "bar"
  3627. },
  3628. "local"
  3629. ]
  3630. ],
  3631. "errorCode": 0,
  3632. "fromCache": true,
  3633. "hasPendingWrites": false
  3634. }
  3635. ]
  3636. }
  3637. ]
  3638. },
  3639. "Writes that fail with code not-found are rejected": {
  3640. "describeName": "Writes:",
  3641. "itName": "Writes that fail with code not-found are rejected",
  3642. "tags": [],
  3643. "config": {
  3644. "useGarbageCollection": true
  3645. },
  3646. "steps": [
  3647. {
  3648. "userListen": [
  3649. 2,
  3650. {
  3651. "path": "collection/key",
  3652. "filters": [],
  3653. "orderBys": []
  3654. }
  3655. ],
  3656. "stateExpect": {
  3657. "activeTargets": {
  3658. "2": {
  3659. "query": {
  3660. "path": "collection/key",
  3661. "filters": [],
  3662. "orderBys": []
  3663. },
  3664. "resumeToken": ""
  3665. }
  3666. }
  3667. }
  3668. },
  3669. {
  3670. "userSet": [
  3671. "collection/key",
  3672. {
  3673. "foo": "bar"
  3674. }
  3675. ],
  3676. "expect": [
  3677. {
  3678. "query": {
  3679. "path": "collection/key",
  3680. "filters": [],
  3681. "orderBys": []
  3682. },
  3683. "added": [
  3684. [
  3685. "collection/key",
  3686. 0,
  3687. {
  3688. "foo": "bar"
  3689. },
  3690. "local"
  3691. ]
  3692. ],
  3693. "errorCode": 0,
  3694. "fromCache": true,
  3695. "hasPendingWrites": true
  3696. }
  3697. ]
  3698. },
  3699. {
  3700. "failWrite": {
  3701. "error": {
  3702. "code": 5
  3703. },
  3704. "expectUserCallback": true
  3705. },
  3706. "expect": [
  3707. {
  3708. "query": {
  3709. "path": "collection/key",
  3710. "filters": [],
  3711. "orderBys": []
  3712. },
  3713. "removed": [
  3714. [
  3715. "collection/key",
  3716. 0,
  3717. {
  3718. "foo": "bar"
  3719. },
  3720. "local"
  3721. ]
  3722. ],
  3723. "errorCode": 0,
  3724. "fromCache": true,
  3725. "hasPendingWrites": false
  3726. }
  3727. ]
  3728. }
  3729. ]
  3730. },
  3731. "Writes that fail with code already-exists are rejected": {
  3732. "describeName": "Writes:",
  3733. "itName": "Writes that fail with code already-exists are rejected",
  3734. "tags": [],
  3735. "config": {
  3736. "useGarbageCollection": true
  3737. },
  3738. "steps": [
  3739. {
  3740. "userListen": [
  3741. 2,
  3742. {
  3743. "path": "collection/key",
  3744. "filters": [],
  3745. "orderBys": []
  3746. }
  3747. ],
  3748. "stateExpect": {
  3749. "activeTargets": {
  3750. "2": {
  3751. "query": {
  3752. "path": "collection/key",
  3753. "filters": [],
  3754. "orderBys": []
  3755. },
  3756. "resumeToken": ""
  3757. }
  3758. }
  3759. }
  3760. },
  3761. {
  3762. "userSet": [
  3763. "collection/key",
  3764. {
  3765. "foo": "bar"
  3766. }
  3767. ],
  3768. "expect": [
  3769. {
  3770. "query": {
  3771. "path": "collection/key",
  3772. "filters": [],
  3773. "orderBys": []
  3774. },
  3775. "added": [
  3776. [
  3777. "collection/key",
  3778. 0,
  3779. {
  3780. "foo": "bar"
  3781. },
  3782. "local"
  3783. ]
  3784. ],
  3785. "errorCode": 0,
  3786. "fromCache": true,
  3787. "hasPendingWrites": true
  3788. }
  3789. ]
  3790. },
  3791. {
  3792. "failWrite": {
  3793. "error": {
  3794. "code": 6
  3795. },
  3796. "expectUserCallback": true
  3797. },
  3798. "expect": [
  3799. {
  3800. "query": {
  3801. "path": "collection/key",
  3802. "filters": [],
  3803. "orderBys": []
  3804. },
  3805. "removed": [
  3806. [
  3807. "collection/key",
  3808. 0,
  3809. {
  3810. "foo": "bar"
  3811. },
  3812. "local"
  3813. ]
  3814. ],
  3815. "errorCode": 0,
  3816. "fromCache": true,
  3817. "hasPendingWrites": false
  3818. }
  3819. ]
  3820. }
  3821. ]
  3822. },
  3823. "Writes that fail with code permission-denied are rejected": {
  3824. "describeName": "Writes:",
  3825. "itName": "Writes that fail with code permission-denied are rejected",
  3826. "tags": [],
  3827. "config": {
  3828. "useGarbageCollection": true
  3829. },
  3830. "steps": [
  3831. {
  3832. "userListen": [
  3833. 2,
  3834. {
  3835. "path": "collection/key",
  3836. "filters": [],
  3837. "orderBys": []
  3838. }
  3839. ],
  3840. "stateExpect": {
  3841. "activeTargets": {
  3842. "2": {
  3843. "query": {
  3844. "path": "collection/key",
  3845. "filters": [],
  3846. "orderBys": []
  3847. },
  3848. "resumeToken": ""
  3849. }
  3850. }
  3851. }
  3852. },
  3853. {
  3854. "userSet": [
  3855. "collection/key",
  3856. {
  3857. "foo": "bar"
  3858. }
  3859. ],
  3860. "expect": [
  3861. {
  3862. "query": {
  3863. "path": "collection/key",
  3864. "filters": [],
  3865. "orderBys": []
  3866. },
  3867. "added": [
  3868. [
  3869. "collection/key",
  3870. 0,
  3871. {
  3872. "foo": "bar"
  3873. },
  3874. "local"
  3875. ]
  3876. ],
  3877. "errorCode": 0,
  3878. "fromCache": true,
  3879. "hasPendingWrites": true
  3880. }
  3881. ]
  3882. },
  3883. {
  3884. "failWrite": {
  3885. "error": {
  3886. "code": 7
  3887. },
  3888. "expectUserCallback": true
  3889. },
  3890. "expect": [
  3891. {
  3892. "query": {
  3893. "path": "collection/key",
  3894. "filters": [],
  3895. "orderBys": []
  3896. },
  3897. "removed": [
  3898. [
  3899. "collection/key",
  3900. 0,
  3901. {
  3902. "foo": "bar"
  3903. },
  3904. "local"
  3905. ]
  3906. ],
  3907. "errorCode": 0,
  3908. "fromCache": true,
  3909. "hasPendingWrites": false
  3910. }
  3911. ]
  3912. }
  3913. ]
  3914. },
  3915. "Writes that fail with code failed-precondition are rejected": {
  3916. "describeName": "Writes:",
  3917. "itName": "Writes that fail with code failed-precondition are rejected",
  3918. "tags": [],
  3919. "config": {
  3920. "useGarbageCollection": true
  3921. },
  3922. "steps": [
  3923. {
  3924. "userListen": [
  3925. 2,
  3926. {
  3927. "path": "collection/key",
  3928. "filters": [],
  3929. "orderBys": []
  3930. }
  3931. ],
  3932. "stateExpect": {
  3933. "activeTargets": {
  3934. "2": {
  3935. "query": {
  3936. "path": "collection/key",
  3937. "filters": [],
  3938. "orderBys": []
  3939. },
  3940. "resumeToken": ""
  3941. }
  3942. }
  3943. }
  3944. },
  3945. {
  3946. "userSet": [
  3947. "collection/key",
  3948. {
  3949. "foo": "bar"
  3950. }
  3951. ],
  3952. "expect": [
  3953. {
  3954. "query": {
  3955. "path": "collection/key",
  3956. "filters": [],
  3957. "orderBys": []
  3958. },
  3959. "added": [
  3960. [
  3961. "collection/key",
  3962. 0,
  3963. {
  3964. "foo": "bar"
  3965. },
  3966. "local"
  3967. ]
  3968. ],
  3969. "errorCode": 0,
  3970. "fromCache": true,
  3971. "hasPendingWrites": true
  3972. }
  3973. ]
  3974. },
  3975. {
  3976. "failWrite": {
  3977. "error": {
  3978. "code": 9
  3979. },
  3980. "expectUserCallback": true
  3981. },
  3982. "expect": [
  3983. {
  3984. "query": {
  3985. "path": "collection/key",
  3986. "filters": [],
  3987. "orderBys": []
  3988. },
  3989. "removed": [
  3990. [
  3991. "collection/key",
  3992. 0,
  3993. {
  3994. "foo": "bar"
  3995. },
  3996. "local"
  3997. ]
  3998. ],
  3999. "errorCode": 0,
  4000. "fromCache": true,
  4001. "hasPendingWrites": false
  4002. }
  4003. ]
  4004. }
  4005. ]
  4006. },
  4007. "Writes that fail with code aborted are rejected": {
  4008. "describeName": "Writes:",
  4009. "itName": "Writes that fail with code aborted are rejected",
  4010. "tags": [],
  4011. "config": {
  4012. "useGarbageCollection": true
  4013. },
  4014. "steps": [
  4015. {
  4016. "userListen": [
  4017. 2,
  4018. {
  4019. "path": "collection/key",
  4020. "filters": [],
  4021. "orderBys": []
  4022. }
  4023. ],
  4024. "stateExpect": {
  4025. "activeTargets": {
  4026. "2": {
  4027. "query": {
  4028. "path": "collection/key",
  4029. "filters": [],
  4030. "orderBys": []
  4031. },
  4032. "resumeToken": ""
  4033. }
  4034. }
  4035. }
  4036. },
  4037. {
  4038. "userSet": [
  4039. "collection/key",
  4040. {
  4041. "foo": "bar"
  4042. }
  4043. ],
  4044. "expect": [
  4045. {
  4046. "query": {
  4047. "path": "collection/key",
  4048. "filters": [],
  4049. "orderBys": []
  4050. },
  4051. "added": [
  4052. [
  4053. "collection/key",
  4054. 0,
  4055. {
  4056. "foo": "bar"
  4057. },
  4058. "local"
  4059. ]
  4060. ],
  4061. "errorCode": 0,
  4062. "fromCache": true,
  4063. "hasPendingWrites": true
  4064. }
  4065. ]
  4066. },
  4067. {
  4068. "failWrite": {
  4069. "error": {
  4070. "code": 10
  4071. },
  4072. "expectUserCallback": true
  4073. },
  4074. "expect": [
  4075. {
  4076. "query": {
  4077. "path": "collection/key",
  4078. "filters": [],
  4079. "orderBys": []
  4080. },
  4081. "removed": [
  4082. [
  4083. "collection/key",
  4084. 0,
  4085. {
  4086. "foo": "bar"
  4087. },
  4088. "local"
  4089. ]
  4090. ],
  4091. "errorCode": 0,
  4092. "fromCache": true,
  4093. "hasPendingWrites": false
  4094. }
  4095. ]
  4096. }
  4097. ]
  4098. },
  4099. "Writes that fail with code out-of-range are rejected": {
  4100. "describeName": "Writes:",
  4101. "itName": "Writes that fail with code out-of-range are rejected",
  4102. "tags": [],
  4103. "config": {
  4104. "useGarbageCollection": true
  4105. },
  4106. "steps": [
  4107. {
  4108. "userListen": [
  4109. 2,
  4110. {
  4111. "path": "collection/key",
  4112. "filters": [],
  4113. "orderBys": []
  4114. }
  4115. ],
  4116. "stateExpect": {
  4117. "activeTargets": {
  4118. "2": {
  4119. "query": {
  4120. "path": "collection/key",
  4121. "filters": [],
  4122. "orderBys": []
  4123. },
  4124. "resumeToken": ""
  4125. }
  4126. }
  4127. }
  4128. },
  4129. {
  4130. "userSet": [
  4131. "collection/key",
  4132. {
  4133. "foo": "bar"
  4134. }
  4135. ],
  4136. "expect": [
  4137. {
  4138. "query": {
  4139. "path": "collection/key",
  4140. "filters": [],
  4141. "orderBys": []
  4142. },
  4143. "added": [
  4144. [
  4145. "collection/key",
  4146. 0,
  4147. {
  4148. "foo": "bar"
  4149. },
  4150. "local"
  4151. ]
  4152. ],
  4153. "errorCode": 0,
  4154. "fromCache": true,
  4155. "hasPendingWrites": true
  4156. }
  4157. ]
  4158. },
  4159. {
  4160. "failWrite": {
  4161. "error": {
  4162. "code": 11
  4163. },
  4164. "expectUserCallback": true
  4165. },
  4166. "expect": [
  4167. {
  4168. "query": {
  4169. "path": "collection/key",
  4170. "filters": [],
  4171. "orderBys": []
  4172. },
  4173. "removed": [
  4174. [
  4175. "collection/key",
  4176. 0,
  4177. {
  4178. "foo": "bar"
  4179. },
  4180. "local"
  4181. ]
  4182. ],
  4183. "errorCode": 0,
  4184. "fromCache": true,
  4185. "hasPendingWrites": false
  4186. }
  4187. ]
  4188. }
  4189. ]
  4190. },
  4191. "Writes that fail with code unimplemented are rejected": {
  4192. "describeName": "Writes:",
  4193. "itName": "Writes that fail with code unimplemented are rejected",
  4194. "tags": [],
  4195. "config": {
  4196. "useGarbageCollection": true
  4197. },
  4198. "steps": [
  4199. {
  4200. "userListen": [
  4201. 2,
  4202. {
  4203. "path": "collection/key",
  4204. "filters": [],
  4205. "orderBys": []
  4206. }
  4207. ],
  4208. "stateExpect": {
  4209. "activeTargets": {
  4210. "2": {
  4211. "query": {
  4212. "path": "collection/key",
  4213. "filters": [],
  4214. "orderBys": []
  4215. },
  4216. "resumeToken": ""
  4217. }
  4218. }
  4219. }
  4220. },
  4221. {
  4222. "userSet": [
  4223. "collection/key",
  4224. {
  4225. "foo": "bar"
  4226. }
  4227. ],
  4228. "expect": [
  4229. {
  4230. "query": {
  4231. "path": "collection/key",
  4232. "filters": [],
  4233. "orderBys": []
  4234. },
  4235. "added": [
  4236. [
  4237. "collection/key",
  4238. 0,
  4239. {
  4240. "foo": "bar"
  4241. },
  4242. "local"
  4243. ]
  4244. ],
  4245. "errorCode": 0,
  4246. "fromCache": true,
  4247. "hasPendingWrites": true
  4248. }
  4249. ]
  4250. },
  4251. {
  4252. "failWrite": {
  4253. "error": {
  4254. "code": 12
  4255. },
  4256. "expectUserCallback": true
  4257. },
  4258. "expect": [
  4259. {
  4260. "query": {
  4261. "path": "collection/key",
  4262. "filters": [],
  4263. "orderBys": []
  4264. },
  4265. "removed": [
  4266. [
  4267. "collection/key",
  4268. 0,
  4269. {
  4270. "foo": "bar"
  4271. },
  4272. "local"
  4273. ]
  4274. ],
  4275. "errorCode": 0,
  4276. "fromCache": true,
  4277. "hasPendingWrites": false
  4278. }
  4279. ]
  4280. }
  4281. ]
  4282. },
  4283. "Writes that fail with code data-loss are rejected": {
  4284. "describeName": "Writes:",
  4285. "itName": "Writes that fail with code data-loss are rejected",
  4286. "tags": [],
  4287. "config": {
  4288. "useGarbageCollection": true
  4289. },
  4290. "steps": [
  4291. {
  4292. "userListen": [
  4293. 2,
  4294. {
  4295. "path": "collection/key",
  4296. "filters": [],
  4297. "orderBys": []
  4298. }
  4299. ],
  4300. "stateExpect": {
  4301. "activeTargets": {
  4302. "2": {
  4303. "query": {
  4304. "path": "collection/key",
  4305. "filters": [],
  4306. "orderBys": []
  4307. },
  4308. "resumeToken": ""
  4309. }
  4310. }
  4311. }
  4312. },
  4313. {
  4314. "userSet": [
  4315. "collection/key",
  4316. {
  4317. "foo": "bar"
  4318. }
  4319. ],
  4320. "expect": [
  4321. {
  4322. "query": {
  4323. "path": "collection/key",
  4324. "filters": [],
  4325. "orderBys": []
  4326. },
  4327. "added": [
  4328. [
  4329. "collection/key",
  4330. 0,
  4331. {
  4332. "foo": "bar"
  4333. },
  4334. "local"
  4335. ]
  4336. ],
  4337. "errorCode": 0,
  4338. "fromCache": true,
  4339. "hasPendingWrites": true
  4340. }
  4341. ]
  4342. },
  4343. {
  4344. "failWrite": {
  4345. "error": {
  4346. "code": 15
  4347. },
  4348. "expectUserCallback": true
  4349. },
  4350. "expect": [
  4351. {
  4352. "query": {
  4353. "path": "collection/key",
  4354. "filters": [],
  4355. "orderBys": []
  4356. },
  4357. "removed": [
  4358. [
  4359. "collection/key",
  4360. 0,
  4361. {
  4362. "foo": "bar"
  4363. },
  4364. "local"
  4365. ]
  4366. ],
  4367. "errorCode": 0,
  4368. "fromCache": true,
  4369. "hasPendingWrites": false
  4370. }
  4371. ]
  4372. }
  4373. ]
  4374. },
  4375. "Writes that fail with code resource_exhausted are not rejected": {
  4376. "describeName": "Writes:",
  4377. "itName": "Writes that fail with code resource_exhausted are not rejected",
  4378. "tags": [],
  4379. "config": {
  4380. "useGarbageCollection": true
  4381. },
  4382. "steps": [
  4383. {
  4384. "userListen": [
  4385. 2,
  4386. {
  4387. "path": "collection/key",
  4388. "filters": [],
  4389. "orderBys": []
  4390. }
  4391. ],
  4392. "stateExpect": {
  4393. "activeTargets": {
  4394. "2": {
  4395. "query": {
  4396. "path": "collection/key",
  4397. "filters": [],
  4398. "orderBys": []
  4399. },
  4400. "resumeToken": ""
  4401. }
  4402. }
  4403. }
  4404. },
  4405. {
  4406. "userSet": [
  4407. "collection/key",
  4408. {
  4409. "foo": "bar"
  4410. }
  4411. ],
  4412. "expect": [
  4413. {
  4414. "query": {
  4415. "path": "collection/key",
  4416. "filters": [],
  4417. "orderBys": []
  4418. },
  4419. "added": [
  4420. [
  4421. "collection/key",
  4422. 0,
  4423. {
  4424. "foo": "bar"
  4425. },
  4426. "local"
  4427. ]
  4428. ],
  4429. "errorCode": 0,
  4430. "fromCache": true,
  4431. "hasPendingWrites": true
  4432. }
  4433. ]
  4434. },
  4435. {
  4436. "failWrite": {
  4437. "error": {
  4438. "code": 8
  4439. },
  4440. "expectUserCallback": false
  4441. }
  4442. }
  4443. ]
  4444. },
  4445. "Writes that fail with code cancelled are retried": {
  4446. "describeName": "Writes:",
  4447. "itName": "Writes that fail with code cancelled are retried",
  4448. "tags": [],
  4449. "config": {
  4450. "useGarbageCollection": true
  4451. },
  4452. "steps": [
  4453. {
  4454. "userListen": [
  4455. 2,
  4456. {
  4457. "path": "collection/key",
  4458. "filters": [],
  4459. "orderBys": []
  4460. }
  4461. ],
  4462. "stateExpect": {
  4463. "activeTargets": {
  4464. "2": {
  4465. "query": {
  4466. "path": "collection/key",
  4467. "filters": [],
  4468. "orderBys": []
  4469. },
  4470. "resumeToken": ""
  4471. }
  4472. }
  4473. }
  4474. },
  4475. {
  4476. "userSet": [
  4477. "collection/key",
  4478. {
  4479. "foo": "bar"
  4480. }
  4481. ],
  4482. "expect": [
  4483. {
  4484. "query": {
  4485. "path": "collection/key",
  4486. "filters": [],
  4487. "orderBys": []
  4488. },
  4489. "added": [
  4490. [
  4491. "collection/key",
  4492. 0,
  4493. {
  4494. "foo": "bar"
  4495. },
  4496. "local"
  4497. ]
  4498. ],
  4499. "errorCode": 0,
  4500. "fromCache": true,
  4501. "hasPendingWrites": true
  4502. }
  4503. ]
  4504. },
  4505. {
  4506. "failWrite": {
  4507. "error": {
  4508. "code": 1
  4509. },
  4510. "expectUserCallback": false
  4511. }
  4512. },
  4513. {
  4514. "writeAck": {
  4515. "version": 1000,
  4516. "expectUserCallback": true
  4517. }
  4518. },
  4519. {
  4520. "watchAck": [
  4521. 2
  4522. ]
  4523. },
  4524. {
  4525. "watchEntity": {
  4526. "docs": [
  4527. [
  4528. "collection/key",
  4529. 0,
  4530. {
  4531. "foo": "bar"
  4532. }
  4533. ]
  4534. ],
  4535. "targets": [
  4536. 2
  4537. ]
  4538. }
  4539. },
  4540. {
  4541. "watchCurrent": [
  4542. [
  4543. 2
  4544. ],
  4545. "resume-token-1000"
  4546. ],
  4547. "watchSnapshot": 1000,
  4548. "expect": [
  4549. {
  4550. "query": {
  4551. "path": "collection/key",
  4552. "filters": [],
  4553. "orderBys": []
  4554. },
  4555. "metadata": [
  4556. [
  4557. "collection/key",
  4558. 0,
  4559. {
  4560. "foo": "bar"
  4561. }
  4562. ]
  4563. ],
  4564. "errorCode": 0,
  4565. "fromCache": false,
  4566. "hasPendingWrites": false
  4567. }
  4568. ]
  4569. }
  4570. ]
  4571. },
  4572. "Writes that fail with code unknown are retried": {
  4573. "describeName": "Writes:",
  4574. "itName": "Writes that fail with code unknown are retried",
  4575. "tags": [],
  4576. "config": {
  4577. "useGarbageCollection": true
  4578. },
  4579. "steps": [
  4580. {
  4581. "userListen": [
  4582. 2,
  4583. {
  4584. "path": "collection/key",
  4585. "filters": [],
  4586. "orderBys": []
  4587. }
  4588. ],
  4589. "stateExpect": {
  4590. "activeTargets": {
  4591. "2": {
  4592. "query": {
  4593. "path": "collection/key",
  4594. "filters": [],
  4595. "orderBys": []
  4596. },
  4597. "resumeToken": ""
  4598. }
  4599. }
  4600. }
  4601. },
  4602. {
  4603. "userSet": [
  4604. "collection/key",
  4605. {
  4606. "foo": "bar"
  4607. }
  4608. ],
  4609. "expect": [
  4610. {
  4611. "query": {
  4612. "path": "collection/key",
  4613. "filters": [],
  4614. "orderBys": []
  4615. },
  4616. "added": [
  4617. [
  4618. "collection/key",
  4619. 0,
  4620. {
  4621. "foo": "bar"
  4622. },
  4623. "local"
  4624. ]
  4625. ],
  4626. "errorCode": 0,
  4627. "fromCache": true,
  4628. "hasPendingWrites": true
  4629. }
  4630. ]
  4631. },
  4632. {
  4633. "failWrite": {
  4634. "error": {
  4635. "code": 2
  4636. },
  4637. "expectUserCallback": false
  4638. }
  4639. },
  4640. {
  4641. "writeAck": {
  4642. "version": 1000,
  4643. "expectUserCallback": true
  4644. }
  4645. },
  4646. {
  4647. "watchAck": [
  4648. 2
  4649. ]
  4650. },
  4651. {
  4652. "watchEntity": {
  4653. "docs": [
  4654. [
  4655. "collection/key",
  4656. 0,
  4657. {
  4658. "foo": "bar"
  4659. }
  4660. ]
  4661. ],
  4662. "targets": [
  4663. 2
  4664. ]
  4665. }
  4666. },
  4667. {
  4668. "watchCurrent": [
  4669. [
  4670. 2
  4671. ],
  4672. "resume-token-1000"
  4673. ],
  4674. "watchSnapshot": 1000,
  4675. "expect": [
  4676. {
  4677. "query": {
  4678. "path": "collection/key",
  4679. "filters": [],
  4680. "orderBys": []
  4681. },
  4682. "metadata": [
  4683. [
  4684. "collection/key",
  4685. 0,
  4686. {
  4687. "foo": "bar"
  4688. }
  4689. ]
  4690. ],
  4691. "errorCode": 0,
  4692. "fromCache": false,
  4693. "hasPendingWrites": false
  4694. }
  4695. ]
  4696. }
  4697. ]
  4698. },
  4699. "Writes that fail with code deadline-exceeded are retried": {
  4700. "describeName": "Writes:",
  4701. "itName": "Writes that fail with code deadline-exceeded are retried",
  4702. "tags": [],
  4703. "config": {
  4704. "useGarbageCollection": true
  4705. },
  4706. "steps": [
  4707. {
  4708. "userListen": [
  4709. 2,
  4710. {
  4711. "path": "collection/key",
  4712. "filters": [],
  4713. "orderBys": []
  4714. }
  4715. ],
  4716. "stateExpect": {
  4717. "activeTargets": {
  4718. "2": {
  4719. "query": {
  4720. "path": "collection/key",
  4721. "filters": [],
  4722. "orderBys": []
  4723. },
  4724. "resumeToken": ""
  4725. }
  4726. }
  4727. }
  4728. },
  4729. {
  4730. "userSet": [
  4731. "collection/key",
  4732. {
  4733. "foo": "bar"
  4734. }
  4735. ],
  4736. "expect": [
  4737. {
  4738. "query": {
  4739. "path": "collection/key",
  4740. "filters": [],
  4741. "orderBys": []
  4742. },
  4743. "added": [
  4744. [
  4745. "collection/key",
  4746. 0,
  4747. {
  4748. "foo": "bar"
  4749. },
  4750. "local"
  4751. ]
  4752. ],
  4753. "errorCode": 0,
  4754. "fromCache": true,
  4755. "hasPendingWrites": true
  4756. }
  4757. ]
  4758. },
  4759. {
  4760. "failWrite": {
  4761. "error": {
  4762. "code": 4
  4763. },
  4764. "expectUserCallback": false
  4765. }
  4766. },
  4767. {
  4768. "writeAck": {
  4769. "version": 1000,
  4770. "expectUserCallback": true
  4771. }
  4772. },
  4773. {
  4774. "watchAck": [
  4775. 2
  4776. ]
  4777. },
  4778. {
  4779. "watchEntity": {
  4780. "docs": [
  4781. [
  4782. "collection/key",
  4783. 0,
  4784. {
  4785. "foo": "bar"
  4786. }
  4787. ]
  4788. ],
  4789. "targets": [
  4790. 2
  4791. ]
  4792. }
  4793. },
  4794. {
  4795. "watchCurrent": [
  4796. [
  4797. 2
  4798. ],
  4799. "resume-token-1000"
  4800. ],
  4801. "watchSnapshot": 1000,
  4802. "expect": [
  4803. {
  4804. "query": {
  4805. "path": "collection/key",
  4806. "filters": [],
  4807. "orderBys": []
  4808. },
  4809. "metadata": [
  4810. [
  4811. "collection/key",
  4812. 0,
  4813. {
  4814. "foo": "bar"
  4815. }
  4816. ]
  4817. ],
  4818. "errorCode": 0,
  4819. "fromCache": false,
  4820. "hasPendingWrites": false
  4821. }
  4822. ]
  4823. }
  4824. ]
  4825. },
  4826. "Writes that fail with code internal are retried": {
  4827. "describeName": "Writes:",
  4828. "itName": "Writes that fail with code internal are retried",
  4829. "tags": [],
  4830. "config": {
  4831. "useGarbageCollection": true
  4832. },
  4833. "steps": [
  4834. {
  4835. "userListen": [
  4836. 2,
  4837. {
  4838. "path": "collection/key",
  4839. "filters": [],
  4840. "orderBys": []
  4841. }
  4842. ],
  4843. "stateExpect": {
  4844. "activeTargets": {
  4845. "2": {
  4846. "query": {
  4847. "path": "collection/key",
  4848. "filters": [],
  4849. "orderBys": []
  4850. },
  4851. "resumeToken": ""
  4852. }
  4853. }
  4854. }
  4855. },
  4856. {
  4857. "userSet": [
  4858. "collection/key",
  4859. {
  4860. "foo": "bar"
  4861. }
  4862. ],
  4863. "expect": [
  4864. {
  4865. "query": {
  4866. "path": "collection/key",
  4867. "filters": [],
  4868. "orderBys": []
  4869. },
  4870. "added": [
  4871. [
  4872. "collection/key",
  4873. 0,
  4874. {
  4875. "foo": "bar"
  4876. },
  4877. "local"
  4878. ]
  4879. ],
  4880. "errorCode": 0,
  4881. "fromCache": true,
  4882. "hasPendingWrites": true
  4883. }
  4884. ]
  4885. },
  4886. {
  4887. "failWrite": {
  4888. "error": {
  4889. "code": 13
  4890. },
  4891. "expectUserCallback": false
  4892. }
  4893. },
  4894. {
  4895. "writeAck": {
  4896. "version": 1000,
  4897. "expectUserCallback": true
  4898. }
  4899. },
  4900. {
  4901. "watchAck": [
  4902. 2
  4903. ]
  4904. },
  4905. {
  4906. "watchEntity": {
  4907. "docs": [
  4908. [
  4909. "collection/key",
  4910. 0,
  4911. {
  4912. "foo": "bar"
  4913. }
  4914. ]
  4915. ],
  4916. "targets": [
  4917. 2
  4918. ]
  4919. }
  4920. },
  4921. {
  4922. "watchCurrent": [
  4923. [
  4924. 2
  4925. ],
  4926. "resume-token-1000"
  4927. ],
  4928. "watchSnapshot": 1000,
  4929. "expect": [
  4930. {
  4931. "query": {
  4932. "path": "collection/key",
  4933. "filters": [],
  4934. "orderBys": []
  4935. },
  4936. "metadata": [
  4937. [
  4938. "collection/key",
  4939. 0,
  4940. {
  4941. "foo": "bar"
  4942. }
  4943. ]
  4944. ],
  4945. "errorCode": 0,
  4946. "fromCache": false,
  4947. "hasPendingWrites": false
  4948. }
  4949. ]
  4950. }
  4951. ]
  4952. },
  4953. "Writes that fail with code unavailable are retried": {
  4954. "describeName": "Writes:",
  4955. "itName": "Writes that fail with code unavailable are retried",
  4956. "tags": [],
  4957. "config": {
  4958. "useGarbageCollection": true
  4959. },
  4960. "steps": [
  4961. {
  4962. "userListen": [
  4963. 2,
  4964. {
  4965. "path": "collection/key",
  4966. "filters": [],
  4967. "orderBys": []
  4968. }
  4969. ],
  4970. "stateExpect": {
  4971. "activeTargets": {
  4972. "2": {
  4973. "query": {
  4974. "path": "collection/key",
  4975. "filters": [],
  4976. "orderBys": []
  4977. },
  4978. "resumeToken": ""
  4979. }
  4980. }
  4981. }
  4982. },
  4983. {
  4984. "userSet": [
  4985. "collection/key",
  4986. {
  4987. "foo": "bar"
  4988. }
  4989. ],
  4990. "expect": [
  4991. {
  4992. "query": {
  4993. "path": "collection/key",
  4994. "filters": [],
  4995. "orderBys": []
  4996. },
  4997. "added": [
  4998. [
  4999. "collection/key",
  5000. 0,
  5001. {
  5002. "foo": "bar"
  5003. },
  5004. "local"
  5005. ]
  5006. ],
  5007. "errorCode": 0,
  5008. "fromCache": true,
  5009. "hasPendingWrites": true
  5010. }
  5011. ]
  5012. },
  5013. {
  5014. "failWrite": {
  5015. "error": {
  5016. "code": 14
  5017. },
  5018. "expectUserCallback": false
  5019. }
  5020. },
  5021. {
  5022. "writeAck": {
  5023. "version": 1000,
  5024. "expectUserCallback": true
  5025. }
  5026. },
  5027. {
  5028. "watchAck": [
  5029. 2
  5030. ]
  5031. },
  5032. {
  5033. "watchEntity": {
  5034. "docs": [
  5035. [
  5036. "collection/key",
  5037. 0,
  5038. {
  5039. "foo": "bar"
  5040. }
  5041. ]
  5042. ],
  5043. "targets": [
  5044. 2
  5045. ]
  5046. }
  5047. },
  5048. {
  5049. "watchCurrent": [
  5050. [
  5051. 2
  5052. ],
  5053. "resume-token-1000"
  5054. ],
  5055. "watchSnapshot": 1000,
  5056. "expect": [
  5057. {
  5058. "query": {
  5059. "path": "collection/key",
  5060. "filters": [],
  5061. "orderBys": []
  5062. },
  5063. "metadata": [
  5064. [
  5065. "collection/key",
  5066. 0,
  5067. {
  5068. "foo": "bar"
  5069. }
  5070. ]
  5071. ],
  5072. "errorCode": 0,
  5073. "fromCache": false,
  5074. "hasPendingWrites": false
  5075. }
  5076. ]
  5077. }
  5078. ]
  5079. },
  5080. "Writes that fail with code unauthenticated are retried": {
  5081. "describeName": "Writes:",
  5082. "itName": "Writes that fail with code unauthenticated are retried",
  5083. "tags": [],
  5084. "config": {
  5085. "useGarbageCollection": true
  5086. },
  5087. "steps": [
  5088. {
  5089. "userListen": [
  5090. 2,
  5091. {
  5092. "path": "collection/key",
  5093. "filters": [],
  5094. "orderBys": []
  5095. }
  5096. ],
  5097. "stateExpect": {
  5098. "activeTargets": {
  5099. "2": {
  5100. "query": {
  5101. "path": "collection/key",
  5102. "filters": [],
  5103. "orderBys": []
  5104. },
  5105. "resumeToken": ""
  5106. }
  5107. }
  5108. }
  5109. },
  5110. {
  5111. "userSet": [
  5112. "collection/key",
  5113. {
  5114. "foo": "bar"
  5115. }
  5116. ],
  5117. "expect": [
  5118. {
  5119. "query": {
  5120. "path": "collection/key",
  5121. "filters": [],
  5122. "orderBys": []
  5123. },
  5124. "added": [
  5125. [
  5126. "collection/key",
  5127. 0,
  5128. {
  5129. "foo": "bar"
  5130. },
  5131. "local"
  5132. ]
  5133. ],
  5134. "errorCode": 0,
  5135. "fromCache": true,
  5136. "hasPendingWrites": true
  5137. }
  5138. ]
  5139. },
  5140. {
  5141. "failWrite": {
  5142. "error": {
  5143. "code": 16
  5144. },
  5145. "expectUserCallback": false
  5146. }
  5147. },
  5148. {
  5149. "writeAck": {
  5150. "version": 1000,
  5151. "expectUserCallback": true
  5152. }
  5153. },
  5154. {
  5155. "watchAck": [
  5156. 2
  5157. ]
  5158. },
  5159. {
  5160. "watchEntity": {
  5161. "docs": [
  5162. [
  5163. "collection/key",
  5164. 0,
  5165. {
  5166. "foo": "bar"
  5167. }
  5168. ]
  5169. ],
  5170. "targets": [
  5171. 2
  5172. ]
  5173. }
  5174. },
  5175. {
  5176. "watchCurrent": [
  5177. [
  5178. 2
  5179. ],
  5180. "resume-token-1000"
  5181. ],
  5182. "watchSnapshot": 1000,
  5183. "expect": [
  5184. {
  5185. "query": {
  5186. "path": "collection/key",
  5187. "filters": [],
  5188. "orderBys": []
  5189. },
  5190. "metadata": [
  5191. [
  5192. "collection/key",
  5193. 0,
  5194. {
  5195. "foo": "bar"
  5196. }
  5197. ]
  5198. ],
  5199. "errorCode": 0,
  5200. "fromCache": false,
  5201. "hasPendingWrites": false
  5202. }
  5203. ]
  5204. }
  5205. ]
  5206. },
  5207. "Ensure correct events after patching a doc (including a delete) and getting watcher events.": {
  5208. "describeName": "Writes:",
  5209. "itName": "Ensure correct events after patching a doc (including a delete) and getting watcher events.",
  5210. "tags": [],
  5211. "config": {
  5212. "useGarbageCollection": true
  5213. },
  5214. "steps": [
  5215. {
  5216. "userListen": [
  5217. 2,
  5218. {
  5219. "path": "collection/doc",
  5220. "filters": [],
  5221. "orderBys": []
  5222. }
  5223. ],
  5224. "stateExpect": {
  5225. "activeTargets": {
  5226. "2": {
  5227. "query": {
  5228. "path": "collection/doc",
  5229. "filters": [],
  5230. "orderBys": []
  5231. },
  5232. "resumeToken": ""
  5233. }
  5234. }
  5235. }
  5236. },
  5237. {
  5238. "watchAck": [
  5239. 2
  5240. ]
  5241. },
  5242. {
  5243. "watchEntity": {
  5244. "docs": [
  5245. [
  5246. "collection/doc",
  5247. 1000,
  5248. {
  5249. "a": {
  5250. "b": 2
  5251. },
  5252. "v": 1
  5253. }
  5254. ]
  5255. ],
  5256. "targets": [
  5257. 2
  5258. ]
  5259. }
  5260. },
  5261. {
  5262. "watchCurrent": [
  5263. [
  5264. 2
  5265. ],
  5266. "resume-token-500"
  5267. ],
  5268. "watchSnapshot": 500,
  5269. "expect": [
  5270. {
  5271. "query": {
  5272. "path": "collection/doc",
  5273. "filters": [],
  5274. "orderBys": []
  5275. },
  5276. "added": [
  5277. [
  5278. "collection/doc",
  5279. 1000,
  5280. {
  5281. "a": {
  5282. "b": 2
  5283. },
  5284. "v": 1
  5285. }
  5286. ]
  5287. ],
  5288. "errorCode": 0,
  5289. "fromCache": false,
  5290. "hasPendingWrites": false
  5291. }
  5292. ]
  5293. },
  5294. {
  5295. "userPatch": [
  5296. "collection/doc",
  5297. {
  5298. "v": 2,
  5299. "a.c": "<DELETE>"
  5300. }
  5301. ],
  5302. "expect": [
  5303. {
  5304. "query": {
  5305. "path": "collection/doc",
  5306. "filters": [],
  5307. "orderBys": []
  5308. },
  5309. "modified": [
  5310. [
  5311. "collection/doc",
  5312. 1000,
  5313. {
  5314. "a": {
  5315. "b": 2
  5316. },
  5317. "v": 2
  5318. },
  5319. "local"
  5320. ]
  5321. ],
  5322. "errorCode": 0,
  5323. "fromCache": false,
  5324. "hasPendingWrites": true
  5325. }
  5326. ]
  5327. },
  5328. {
  5329. "watchEntity": {
  5330. "docs": [
  5331. [
  5332. "collection/doc",
  5333. 2000,
  5334. {
  5335. "a": {
  5336. "b": 2
  5337. },
  5338. "v": 2
  5339. }
  5340. ]
  5341. ],
  5342. "targets": [
  5343. 2
  5344. ]
  5345. },
  5346. "watchSnapshot": 2000
  5347. },
  5348. {
  5349. "writeAck": {
  5350. "version": 2000,
  5351. "expectUserCallback": true
  5352. },
  5353. "expect": [
  5354. {
  5355. "query": {
  5356. "path": "collection/doc",
  5357. "filters": [],
  5358. "orderBys": []
  5359. },
  5360. "metadata": [
  5361. [
  5362. "collection/doc",
  5363. 2000,
  5364. {
  5365. "a": {
  5366. "b": 2
  5367. },
  5368. "v": 2
  5369. }
  5370. ]
  5371. ],
  5372. "errorCode": 0,
  5373. "fromCache": false,
  5374. "hasPendingWrites": false
  5375. }
  5376. ]
  5377. }
  5378. ]
  5379. },
  5380. "Writes are resent after network disconnect": {
  5381. "describeName": "Writes:",
  5382. "itName": "Writes are resent after network disconnect",
  5383. "tags": [],
  5384. "config": {
  5385. "useGarbageCollection": true
  5386. },
  5387. "steps": [
  5388. {
  5389. "userSet": [
  5390. "collection/key",
  5391. {
  5392. "foo": "bar"
  5393. }
  5394. ],
  5395. "stateExpect": {
  5396. "numOutstandingWrites": 1
  5397. }
  5398. },
  5399. {
  5400. "enableNetwork": false,
  5401. "stateExpect": {
  5402. "activeTargets": {},
  5403. "limboDocs": [],
  5404. "writeStreamRequestCount": 3
  5405. }
  5406. },
  5407. {
  5408. "enableNetwork": true,
  5409. "stateExpect": {
  5410. "writeStreamRequestCount": 5,
  5411. "numOutstandingWrites": 1
  5412. }
  5413. },
  5414. {
  5415. "writeAck": {
  5416. "version": 1,
  5417. "expectUserCallback": false
  5418. },
  5419. "stateExpect": {
  5420. "numOutstandingWrites": 0
  5421. }
  5422. }
  5423. ]
  5424. }
  5425. }