From 8cd5541244611d1e9c0919bed7094b6d393075b3 Mon Sep 17 00:00:00 2001 From: Keepers Date: Thu, 18 May 2023 10:07:59 -0600 Subject: [PATCH 01/13] Sanity test yml refs (#3442) #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :robot: Supportability/Tests #### Test Plan - [x] :muscle: Manual - [x] :green_heart: E2E --- .../actions/backup-restore-test/action.yml | 16 ++- .github/workflows/sanity-test.yaml | 130 +++++++++--------- 2 files changed, 79 insertions(+), 67 deletions(-) diff --git a/.github/actions/backup-restore-test/action.yml b/.github/actions/backup-restore-test/action.yml index 83bee4c72..10f81cbb0 100644 --- a/.github/actions/backup-restore-test/action.yml +++ b/.github/actions/backup-restore-test/action.yml @@ -50,9 +50,11 @@ runs: run: | set -euo pipefail ./corso restore '${{ inputs.service }}' \ - --no-stats --hide-progress \ + --no-stats \ + --hide-progress \ ${{ inputs.restore-args }} \ - --backup '${{ steps.backup.outputs.result }}' 2>&1 | + --backup '${{ steps.backup.outputs.result }}' \ + 2>&1 | tee /tmp/corsologs | grep -i -e 'Restoring to folder ' | sed "s/Restoring to folder /result=/" | @@ -77,7 +79,9 @@ runs: run: | set -euo pipefail ./corso backup list ${{ inputs.service }} \ - --no-stats --hide-progress 2>&1 | + --no-stats \ + --hide-progress \ + 2>&1 | tee /tmp/corso-backup-list.log if ! grep -q ${{ steps.backup.outputs.result }} /tmp/corso-backup-list.log @@ -92,8 +96,10 @@ runs: run: | set -euo pipefail ./corso backup list ${{ inputs.service }} \ - --no-stats --hide-progress \ - --backup "${{ steps.backup.outputs.result }}" 2>&1 | + --no-stats \ + --hide-progress \ + --backup "${{ steps.backup.outputs.result }}" \ + 2>&1 | tee /tmp/corso-backup-list-item.log if ! grep -q ${{ steps.backup.outputs.result }} /tmp/corso-backup-list-item.log diff --git a/.github/workflows/sanity-test.yaml b/.github/workflows/sanity-test.yaml index c793986e7..e5b7c57cb 100644 --- a/.github/workflows/sanity-test.yaml +++ b/.github/workflows/sanity-test.yaml @@ -27,20 +27,20 @@ jobs: environment: Testing runs-on: ubuntu-latest env: + # Need these in the local env so that corso can read them AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY_SECRET }} AZURE_CLIENT_ID: ${{ secrets[needs.SetM365App.outputs.client_id_env] }} AZURE_CLIENT_SECRET: ${{ secrets[needs.SetM365App.outputs.client_secret_env] }} AZURE_TENANT_ID: ${{ secrets.TENANT_ID }} - CORSO_BUCKET: ${{ secrets.CI_TESTS_S3_BUCKET }} + CORSO_PASSPHRASE: ${{ secrets.INTEGRATION_TEST_CORSO_PASSPHRASE }} + # re-used values + # don't forget: return to Corso_Test_Sanity_ CORSO_LOG_DIR: testlog CORSO_LOG_FILE: testlog/testlogging.log - CORSO_PASSPHRASE: ${{ secrets.INTEGRATION_TEST_CORSO_PASSPHRASE }} RESTORE_DEST_PFX: Corso_Test_Sanity_ TEST_RESULT: test_results TEST_USER: ${{ github.event.inputs.user != '' && github.event.inputs.user || secrets.CORSO_M365_TEST_USER_ID }} - TEST_SITE: ${{ secrets.CORSO_M365_TEST_SITE_URL }} - SECONDARY_TEST_USER : ${{ secrets.CORSO_SECONDARY_M365_TEST_USER_ID }} # The default working directory doesn't seem to apply to things without # the 'run' directive. https://stackoverflow.com/a/67845456 WORKING_DIR: src @@ -87,9 +87,9 @@ jobs: user: ${{ env.TEST_USER }} folder-prefix: ${{ env.RESTORE_DEST_PFX }} older-than: ${{ env.NOW }} - azure-client-id: ${{ env.AZURE_CLIENT_ID }} - azure-client-secret: ${{ env.AZURE_CLIENT_SECRET }} - azure-tenant-id: ${{ env.AZURE_TENANT_ID }} + azure-client-id: ${{ secrets[needs.SetM365App.outputs.client_id_env] }} + azure-client-secret: ${{ secrets[needs.SetM365App.outputs.client_secret_env] }} + azure-tenant-id: ${{ secrets.TENANT_ID }} m365-admin-user: ${{ secrets.M365_TENANT_ADMIN_USER }} m365-admin-password: ${{ secrets.M365_TENANT_ADMIN_PASSWORD }} @@ -97,13 +97,13 @@ jobs: if: always() uses: ./.github/actions/purge-m365-data with: - site: ${{ env.TEST_SITE }} + site: ${{ secrets.CORSO_M365_TEST_SITE_URL }} folder-prefix: ${{ env.RESTORE_DEST_PFX }} libraries: ${{ vars.CORSO_M365_TEST_SITE_LIBRARIES }} older-than: ${{ env.NOW }} - azure-client-id: ${{ env.AZURE_CLIENT_ID }} - azure-client-secret: ${{ env.AZURE_CLIENT_SECRET }} - azure-tenant-id: ${{ env.AZURE_TENANT_ID }} + azure-client-id: ${{ secrets[needs.SetM365App.outputs.client_id_env] }} + azure-client-secret: ${{ secrets[needs.SetM365App.outputs.client_secret_env] }} + azure-tenant-id: ${{ secrets.TENANT_ID }} m365-admin-user: ${{ secrets.M365_TENANT_ADMIN_USER }} m365-admin-password: ${{ secrets.M365_TENANT_ADMIN_PASSWORD }} @@ -122,10 +122,13 @@ jobs: run: | set -euo pipefail prefix=$(date +"%Y-%m-%d-%T") - echo -e "\nRepo init test\n" >> ${CORSO_LOG_FILE} + echo -e "\nRepo init test\n" >> ${{ env.CORSO_LOG_FILE }} ./corso repo init s3 \ - --no-stats --hide-progress --prefix $prefix \ - --bucket ${CORSO_BUCKET} 2>&1 | tee $TEST_RESULT/initrepo.txt + --no-stats \ + --hide-progress \ + --prefix $prefix \ + --bucket ${{ secrets.CI_TESTS_S3_BUCKET }} \ + 2>&1 | tee $TEST_RESULT/initrepo.txt if ! grep -q 'Initialized a S3 repository within bucket' $TEST_RESULT/initrepo.txt then @@ -138,10 +141,13 @@ jobs: - name: Repo connect test run: | set -euo pipefail - echo -e "\nRepo connect test\n" >> ${CORSO_LOG_FILE} + echo -e "\nRepo connect test\n" >> ${{ env.CORSO_LOG_FILE }} ./corso repo connect s3 \ - --no-stats --hide-progress --prefix ${{ steps.repo-init.outputs.result }} \ - --bucket ${CORSO_BUCKET} 2>&1 | tee $TEST_RESULT/connect.txt + --no-stats \ + --hide-progress \ + --prefix ${{ steps.repo-init.outputs.result }} \ + --bucket ${{ secrets.CI_TESTS_S3_BUCKET }} \ + 2>&1 | tee $TEST_RESULT/connect.txt if ! grep -q 'Connected to S3 bucket' $TEST_RESULT/connect.txt then @@ -159,9 +165,9 @@ jobs: working-directory: ./src/cmd/factory run: | go run . exchange emails \ - --user ${TEST_USER} \ - --tenant ${AZURE_TENANT_ID} \ - --destination ${RESTORE_DEST_PFX}${{ steps.repo-init.outputs.result }} \ + --user ${{ env.TEST_USER }} \ + --tenant ${{ secrets.TENANT_ID }} \ + --destination ${{ env.RESTORE_DEST_PFX }}${{ steps.repo-init.outputs.result }} \ --count 4 - name: Exchange - Backup @@ -170,9 +176,9 @@ jobs: with: service: exchange kind: backup - backup-args: '--mailbox "${TEST_USER}" --data "email"' - restore-args: '--email-folder ${RESTORE_DEST_PFX}${{ steps.repo-init.outputs.result }}' - test-folder: '${RESTORE_DEST_PFX}${{ steps.repo-init.outputs.result }}' + backup-args: '--mailbox "${{ env.TEST_USER }}" --data "email"' + restore-args: '--email-folder ${{ env.RESTORE_DEST_PFX }}${{ steps.repo-init.outputs.result }}' + test-folder: '${{ env.RESTORE_DEST_PFX }}${{ steps.repo-init.outputs.result }}' - name: Exchange - Incremental backup id: exchange-backup-incremental @@ -180,9 +186,9 @@ jobs: with: service: exchange kind: backup-incremental - backup-args: '--mailbox "${TEST_USER}" --data "email"' - restore-args: '--email-folder ${RESTORE_DEST_PFX}${{ steps.repo-init.outputs.result }}' - test-folder: '${RESTORE_DEST_PFX}${{ steps.repo-init.outputs.result }}' + backup-args: '--mailbox "${{ env.TEST_USER }}" --data "email"' + restore-args: '--email-folder ${{ env.RESTORE_DEST_PFX }}${{ steps.repo-init.outputs.result }}' + test-folder: '${{ env.RESTORE_DEST_PFX }}${{ steps.repo-init.outputs.result }}' base-backup: ${{ steps.exchange-backup.outputs.backup-id }} - name: Exchange - Non delta backup @@ -191,9 +197,9 @@ jobs: with: service: exchange kind: backup-non-delta - backup-args: '--mailbox "${TEST_USER}" --data "email" --disable-delta' - restore-args: '--email-folder ${RESTORE_DEST_PFX}${{ steps.repo-init.outputs.result }}' - test-folder: '${RESTORE_DEST_PFX}${{ steps.repo-init.outputs.result }}' + backup-args: '--mailbox "${{ env.TEST_USER }}" --data "email" --disable-delta' + restore-args: '--email-folder ${{ env.RESTORE_DEST_PFX }}${{ steps.repo-init.outputs.result }}' + test-folder: '${{ env.RESTORE_DEST_PFX }}${{ steps.repo-init.outputs.result }}' base-backup: ${{ steps.exchange-backup.outputs.backup-id }} - name: Exchange - Incremental backup after non-delta @@ -202,9 +208,9 @@ jobs: with: service: exchange kind: backup-incremental-after-non-delta - backup-args: '--mailbox "${TEST_USER}" --data "email"' - restore-args: '--email-folder ${RESTORE_DEST_PFX}${{ steps.repo-init.outputs.result }}' - test-folder: '${RESTORE_DEST_PFX}${{ steps.repo-init.outputs.result }}' + backup-args: '--mailbox "${{ env.TEST_USER }}" --data "email"' + restore-args: '--email-folder ${{ env.RESTORE_DEST_PFX }}${{ steps.repo-init.outputs.result }}' + test-folder: '${{ env.RESTORE_DEST_PFX }}${{ steps.repo-init.outputs.result }}' base-backup: ${{ steps.exchange-backup.outputs.backup-id }} @@ -220,10 +226,10 @@ jobs: suffix=$(date +"%Y-%m-%d_%H-%M-%S") go run . onedrive files \ - --user ${TEST_USER} \ - --secondaryuser ${SECONDARY_TEST_USER} \ - --tenant ${AZURE_TENANT_ID} \ - --destination ${RESTORE_DEST_PFX}$suffix \ + --user ${{ env.TEST_USER }} \ + --secondaryuser ${{ env.CORSO_SECONDARY_M365_TEST_USER_ID }} \ + --tenant ${{ secrets.TENANT_ID }} \ + --destination ${{ env.RESTORE_DEST_PFX }}$suffix \ --count 4 echo result="${suffix}" >> $GITHUB_OUTPUT @@ -234,19 +240,19 @@ jobs: with: service: onedrive kind: backup - backup-args: '--user "${TEST_USER}"' - restore-args: '--folder ${RESTORE_DEST_PFX}${{ steps.new-data-creation-onedrive.outputs.result }} --restore-permissions' - test-folder: '${RESTORE_DEST_PFX}${{ steps.new-data-creation-onedrive.outputs.result }}' + backup-args: '--user "${{ env.TEST_USER }}"' + restore-args: '--folder ${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-onedrive.outputs.result }} --restore-permissions' + test-folder: '${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-onedrive.outputs.result }}' # generate some more enteries for incremental check - name: OneDrive - Create new data (for incremental) working-directory: ./src/cmd/factory run: | go run . onedrive files \ - --user ${TEST_USER} \ - --secondaryuser ${SECONDARY_TEST_USER} \ - --tenant ${AZURE_TENANT_ID} \ - --destination ${RESTORE_DEST_PFX}${{ steps.new-data-creation-onedrive.outputs.result }} \ + --user ${{ env.TEST_USER }} \ + --secondaryuser ${{ env.CORSO_SECONDARY_M365_TEST_USER_ID }} \ + --tenant ${{ secrets.TENANT_ID }} \ + --destination ${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-onedrive.outputs.result }} \ --count 4 - name: OneDrive - Incremental backup @@ -255,9 +261,9 @@ jobs: with: service: onedrive kind: incremental - backup-args: '--user "${TEST_USER}"' - restore-args: '--folder ${RESTORE_DEST_PFX}${{ steps.new-data-creation-onedrive.outputs.result }} --restore-permissions' - test-folder: '${RESTORE_DEST_PFX}${{ steps.new-data-creation-onedrive.outputs.result }}' + backup-args: '--user "${{ env.TEST_USER }}"' + restore-args: '--folder ${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-onedrive.outputs.result }} --restore-permissions' + test-folder: '${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-onedrive.outputs.result }}' ########################################################################################################################################## @@ -271,11 +277,11 @@ jobs: suffix=$(date +"%Y-%m-%d_%H-%M-%S") go run . sharepoint files \ - --site ${TEST_SITE} \ - --user ${TEST_USER} \ - --secondaryuser ${SECONDARY_TEST_USER} \ - --tenant ${AZURE_TENANT_ID} \ - --destination ${RESTORE_DEST_PFX}$suffix \ + --site ${{ secrets.CORSO_M365_TEST_SITE_URL }} \ + --user ${{ env.TEST_USER }} \ + --secondaryuser ${{ env.CORSO_SECONDARY_M365_TEST_USER_ID }} \ + --tenant ${{ secrets.TENANT_ID }} \ + --destination ${{ env.RESTORE_DEST_PFX }}$suffix \ --count 4 echo result="${suffix}" >> $GITHUB_OUTPUT @@ -286,20 +292,20 @@ jobs: with: service: sharepoint kind: backup - backup-args: '--site "${TEST_SITE}"' - restore-args: '--folder ${RESTORE_DEST_PFX}${{ steps.new-data-creation-sharepoint.outputs.result }} --restore-permissions' - test-folder: '${RESTORE_DEST_PFX}${{ steps.new-data-creation-sharepoint.outputs.result }}' + backup-args: '--site "${{ secrets.CORSO_M365_TEST_SITE_URL }}"' + restore-args: '--folder ${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-sharepoint.outputs.result }} --restore-permissions' + test-folder: '${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-sharepoint.outputs.result }}' # generate some more enteries for incremental check - name: SharePoint - Create new data (for incremental) working-directory: ./src/cmd/factory run: | go run . sharepoint files \ - --site ${TEST_SITE} \ - --user ${TEST_USER} \ - --secondaryuser ${SECONDARY_TEST_USER} \ - --tenant ${AZURE_TENANT_ID} \ - --destination ${RESTORE_DEST_PFX}${{ steps.new-data-creation-sharepoint.outputs.result }} \ + --site ${{ secrets.CORSO_M365_TEST_SITE_URL }} \ + --user ${{ env.TEST_USER }} \ + --secondaryuser ${{ env.CORSO_SECONDARY_M365_TEST_USER_ID }} \ + --tenant ${{ secrets.TENANT_ID }} \ + --destination ${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-sharepoint.outputs.result }} \ --count 4 - name: SharePoint - Incremental backup @@ -308,9 +314,9 @@ jobs: with: service: sharepoint kind: incremental - backup-args: '--site "${TEST_SITE}"' - restore-args: '--folder ${RESTORE_DEST_PFX}${{ steps.new-data-creation-sharepoint.outputs.result }} --restore-permissions' - test-folder: '${RESTORE_DEST_PFX}${{ steps.new-data-creation-sharepoint.outputs.result }}' + backup-args: '--site "${{ secrets.CORSO_M365_TEST_SITE_URL }}"' + restore-args: '--folder ${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-sharepoint.outputs.result }} --restore-permissions' + test-folder: '${{ env.RESTORE_DEST_PFX }}${{ steps.new-data-creation-sharepoint.outputs.result }}' ########################################################################################################################################## From 2f368326e25b7bf71d61c49e723e8e9338dcf2f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C4=8Dnica=20Mellifera?= Date: Thu, 18 May 2023 09:30:00 -0700 Subject: [PATCH 02/13] add png background to fix dark mode view of this article (#3450) --- #### Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No #### Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [x] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [ ] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- website/blog/images/chained_backups.png | Bin 36574 -> 229694 bytes website/blog/images/independent_backups.png | Bin 34941 -> 237244 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/website/blog/images/chained_backups.png b/website/blog/images/chained_backups.png index 0e51e397874eba5f4e96d825f2723e29007b562f..78becb6c0767e8c195c9824350d79eca61a9030c 100644 GIT binary patch literal 229694 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 `?--#;acW%A)yUANg_k%a{HIzWtjX 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

a zaF%RENPmeN<%hAbh8)Tmn~}9`QcjyT;$W#GYZ&+OsPdSKe(B?idR7uG7({r=L04I2 zgE-z)ZTTitF;#--_hFXrNH@!O3cEviQJWJ6#Yd0d=Ot(5afEeYz)ULQY>FC}>W=zr zTAO~_lTt|6}d559<;ZkX%58i zHo~UHiG!T-5`}5{H>wYCpdrxI+DORjMP{J81$A5@n1<+ys?`DURoYm;bS&|i&?sZ6 z>uS^PQnwyI^1Awntu7yn%BkwBFNSI4H2l)hzSUnk=ydCl zxjCGqbcZpQ6bT$#M_+a&(?okep3-`hx---|P~g>|;yn@#{GNi29cSS})5D^fyKXeZ z(0+T|0sWj5+g3%t4$L0H-vlffc*?(<%^nO&WR<`h*PK={_8LW+My}J89K$YM)k%vS ziTAvNj@$kQ`si_gqIj&Gxr3E#o)Erv8*^1SLHFN(dooM-HNCB6S>5P`%IjJ&}rR?%?&j z?un#kSaZ4yo>6~4`2v3Q9!}e-rbnBJ>)LmLAp!O9^>l1yTW;a9X0M3q4o4r2=}s$& z5PS;2I7sfYG6sk()RhW6ZIdXy3h-FqE>;?K)uq`ribexewJ+vLf9L&d6R(6}(3!`t z)F~yQZWHJ~-^e)-H(SSMR#Kq)D3cW<5dN$ziQ2L4QsF(C^3-iRqBa@ESLDW|Pvai$ zruTx%l4HTf!>;txML^0tYQm)4A493pg$3xEk76g}C(s_CkUMw&=3*wDzmWb@ zJ-UceE7D-Z_c~k3&yFXty)qNdQj1V?+VwgHg*v+R9?_uS*LB&&yglq=~u48E3QLzov6!p=^(Y1x#O=9wD zCs|YvcbZIhe(AAw;Wk1>I<*dc|k+hSJvtf&B6nq-Ljdvp* zEK^ip6fCWK8+dNFot{3sz)(R?6F@5)oCmjIJ-rBJwFn<6N5AqZqwfK$UZrA|;^i?A z*~~#-{a<;|UBX=Rpk+7{EnCW?Mejz7khL<{LknqE&ZjXa8yU;bJ9xk_s(fU5O2rvB zz~CU#kDL0d$+*I6BAY!m&>e>B{t9yKa6P@SUA{Jx&0q%Ayx?{9T?FPc8q5p~eWJUx zmflCqUOLP{4uH_oyzVnXOg4B{o5ft6umH2xdMkT6cy4SyZUpfIto68P+rKfTkNFB{ z3Bq9T&gQd{6<5@5A%*{CprjhkKylSOyB+xIuU5p;9Wk$C5;$*1%~d;Gornv)!mc60 zeAc_M+5gy~d?;+9wiBZbTm?w$TrS$|ayAd2+sXFgDGdmgbtO7zML`s3xBJm8z!j

cbTZ6 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�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

go?wn~I%O-a%iTfm*Y2oF@ zem<+d^}g_}__(Pr;WZZOgYA{DgpRf$ioc<0)!W){CDm)VXpoAzg~;CRh|%z-Zk|NYnh1_%ikHdn6IM*si-07*qo IM6N<$f|@)YKmY&$ literal 36574 zcmeEu2|U!@{(osIQXxgzjjikqvae$qdyzFH#u(dR?AxTmNMU5jt|)|L&t6H$PLiGM zd-k3Gcf@mhmV1Bq{_p+$fA@F)&+F+K^F8N$Kj)m!`F!4=<(xBtn(B&YPEnmYa^%Pv zm=g5*ks}1SBS(&w5S{=^G}CC4fj>vl*A-=tylSGEJaXjnh?BgYldYQt(guEn1tRz3 z8w)?LB?|4t0)evd^PAe+bDJYg5ss#|Xl^^W6Ho-y+oH^o7D%}Hk2d_g{17f)K`uUs zHZLCwM21fo_~7N|77!FM_|e`J0k=CKsD|=D+Sr(~@GA&%^8%zUtC^Z1?VM0(OBRSM z@C>tag4+OpfnwlOLksxO1ODgZHQ^I9xq1coDr0YN1J{M$RzU)zQ4oY&<%S3W#g|o- zwAEBu_~n4_Hb`qY@JA7DW{twXB4_D{vIR;M`1ts_dGY@Ng<7T-rjE#;NZ@A%cQQr% zn3cJewE#pJ>7?&)%}PPYUEe_js`6ttE^tRQ5@mNVc|L9ko*e#VCwF`Jk5U8*g|GoS z? zh1`Bi?U1Ieo1&wsy`>t;e4laVZa>Ig6%qJB)7<@_K;WPN;dt21L9h4%Eu_c6c=!%x zgK$Qg!_hz9J!t5JLfJSW?SEZphO)DRn;k6gK|@nVN0jTYn^~Z24kmZd#vYjWuc+e- zw9HHazU}knr)IiHb0=<34L4=B99A3p1b`?c|8EhW}I}WF`#1 zZShOZ;c^1n0jNA)bL>t3GW&xO0b1q+Kal19qQAW=e_0zvIH2oJj_v^2!`JbZ_-+m~ zfluh*+4V1S^-G!MPcp@SC{m^evW)nJHlEzyv)(|P19AD=;mBH51PO32Ppo1=f5vO+nd_` zA+K%&dVz36Iop|Ynf;J#Jj;-FNGGHzAohR2wZj4Zt7ZrY){pi4>ofc@`oCl10Eyo( z&hO~rMfopM!w+a3UK)O_#CE8CKrppIBJhUK25zx0Sw8{5L5rW@0k6SG0MBI(Ub01+ zo8v*|4`F4W=ldQ7U?=|o75-2e{`FA7FTgGME37y)H$Ov#;6cAXLj@n?08{>bpaNJ| z{L=me6~CbVLDf&I{-1~Xg8xCN4>-8LS;|9{_@`m#Pt=FV{%4{7|0;6_ITYmInWbN> z;GgF1z>Ply^naaa{GVj*07?1{Mnd7{&h|Ed3*rPg7Jy&t1h)nLKuw*1^aH->zr_3r z!iCKRe&;W-@I!?8Z$pHHeyRC?9rQpBW0!-VM?l~Yf*z5BvR`>Jhtbi$k0*2WcT0PS z8vnHUJ0$dbKl%4C`cHRu7{qY7{O89pd|WPoj{O4SKX~`MnC0)r_TR6@zjF-tcP;RL z=G-Cw+PVLyhp>lM>%Y;aA4aDC3qx4pe;)V+{z|qBigd(ht@(K!;TCWp`v~MXfeij1 zB);q&;Vwv&Ga9JI#|iscQ{<0S*H_2UWev;BB72Yd#6z8(McBPI8DIg(DMjtF44Zhy<<4^w9cnguui z)h5i}&Qar67Z?YSss1U){?pPP=E{EdCJ)OT;WnmDNSA}{hXc|3BMb~J+@yoFy+z`pz!dp18h`>S0F9K!2?pA9*j@nM%g zmg4`SO9-%)32Ywx!t1}ynS<8*dkFtk%fD}{f$tC?{<3ZKySV8m9Wb*oMWd1U{hyz5 zz`s!gH>49@3-(1D`2Ld;08f9>0sOF-j^Or2g zL6?I32dVSJF8{9u^UweQCf^jlw|q#@9&dpF=kV7@J$^PCf9*Tokp9MgUB$QknPZ2J z(LZLU4#)am(*I?TUU{`EQy5jY5v4|V$R(8^(#|K2)%sKSRJc*wASOyv$W>31sq8}fpO%=yR2|Bq|* z{s8{U>8k_R_NQZRKcmim?cu??9~B2L0Oyl{cmsc!%eoGucjO4e5g1fP+s$}3{$xJ0 ze3$=#JoL1ZCcpBz@HplGBgbInrb`s(^`Ic;lk%a=&j^)5Rf6B5v&+)QO?;gaeRV){-s>hMYeNW9+zv$t*-oU8p7)ikoH>80;u@b>Ns10{fcQ0; z8a={gtn?=^|JZzuTBlJuT3rf;D&O$`qKA;n%IW_YrV!vlMhu&+0Bvyj4`t} zc6L7nIZYl%Ob(sgWA4GcC95G>)(fxHcutNzC#fKJD-`sS0c^JABfk5!$^cz_+$v#b z^_j|~##(>+1zkhM%I(?ed&@2xbo-3uG_mR6`~)2tFxh;wI?reJ(K68eMW^+ik35OQ zN+fH-`cgsV7jEG#?edMpJXx_8Dhm8^6J=&w*%h<7 z3RannckOTE>NGLRKvc?ww1#VGh@E{`L+7K}V^THRd zVl$g^wng;`2Ij%()-G?(66>3&oHdb2HL*9UQgWNv-OAs!QegnAd{4MV0Ak>kJX%3N zy5-~cVRkgixTSZAD4s{oCB8-HU0G{uL??NIOD z`#x+fSB-hI!^%}Y^J#PBu}1!if5vBi490!acDAH(v!Jq{dv~W#aN*5B8tw9;O7nCY zd2`!sv>HT*(16s~XP91aCBJ=oY&x4t6S}!;IJc$9RsW_JoYyf`I^IetSgrelhKGt2 z$Koc#dz66GQu)rjqI)I%-p;(D=uD00L>WY5ZhAQbY(fGx$1ThC0Yjs6`zBTJrDF4w zO1E3qPyy#4{OayCEj5WOpZp%7lHo7Z9~bV+k4#mKXK;OTABlFg#x%lph1mGFiXagb zevdU4Iu@WQV~f}w&u6)Q5fBRE! z+N`UY^pp~oZc?`^TP2j(85yvSu9Z-t1biUz@=o3FjCIr`Kk)~0gM zV2sB$O3>?Rw6$DYXYVSdnm{Ymz+nN^0UA3IYn$4R@wUk-+Z4f3WTGk-5@Tw&KhB`1 zrdmm??h>&wki%GWK@tS4(n;O~UQ(adc51^Ych6=Oe%UmOFW!0OiF~1NVLebxw$IVW zc#iTl3pNvUqbr&6KVvUMWZhl;zS?OKC;wPYQl3l2eMrz1IfiO@MSIo6Gjn43TdY=7 zv9d|5!=+4oF6TBlXb{A`x3V(?3@Oa}?N zbFT4C%DbDH_155m)(EccF0US=g1w=d2nGWWlq`F^^n9Hr81zZw&U}qkK}DJB00|~! z+vsIwQ{|!y*PGgNqa-iSa;lDQy`zw#6)v|a@>yJ{DTuIcZ{$t(KSSLa(SL3tBFZ?8 z>#hS^>t(~QX%eW)6^pFQZJP7V*K)8o-5;$uZKIm9J49AKw|Dp#WOzMqBhu~)$S*Ge zU8lg!x<$+@iiK~wYOoIgDzJB(IXY|!yhxd9{6w|%L{BJS&fYl=x)Xj-N}2*Yrg?o_ zOXi#0H(F0U9)n-ibTvTKCDkF#n~erSVbd7U^-0ioHqc9@BV-~1#^ZqHqlrqhqa=_&Ck>^5C6)ljao?<40cL$A15ek{iWFlLYSfESI>@IB3yoW1e}Ywe1(uePM(1rCwGH>MLLPm zx3-cViLEuI%F=MAW<2G~$inOEZ~agqG?3={l=cbV1k#Hf;0>SU`)qzrN({JpMJh1A zBg=s4go7uH@Zk<28HQzn&;l=mWtFpe-8awWh3b`xDB@#QA^zUx91T;n0j5V0-?U1g@ZobmwAotG10-KUTC zo7_%PB1r#056-Q<{A?}_?^Qr&K@S4}7P?_dK{aL)jG@Zgj9|}mXU|`k$9oPpmT7JM zkIeJ%X)^n2elNVyaBXi)07`*wIKYyd+wP0 zx&2AVE08%WssSV!tk`aegG!j+ZuPJT(@hiYbD-<7eNrgbOc7{26tx9(S)qr-{-&#OjuLt0-opEt*-f(0LFcg{&N}s@nvLK zTyrIWB}OdcQuvI(6XRy&$}u`^8DWwW2>F~yTKDZo)xp?@f&@9G_IPpgyZ7M;;d$w# zq%~J5SOCmGuPyOJ>r4TQ5jT^tSReO1t&iuj&fp_hpW7D$1f zvYMfG|>hrYP+y#yXM}<1+t`A)bdl8;rl0wX4d%2F_ zy9_K(CHL!gPznc2))k}(tf-I?Y};-)R8hoIoUp;dMSDNpFQxkXY8Y#T(~Fd07Pa&D zM>xXNBLwtG^LN*5iupM%B<%xy#3@6n9u@p5mz&G#lVbg(W#&=dto-D-Ch^_Nuk)0| zjoLoR2#97(OjCz(_E((qnVT_Y179P2pHRO zvPoMf<1nXk<~{M!GPm*V?{SH15zStrc}TJ;(+PFxNcQwpj?zt7Ta+B5I~nrP0@5-7 zlGHUiGZJ8wxvkEMC4Nwuumm7I&6VRiet4|Au`MsgsCk=g!;e?Dg;n(4xJU@aedDef z#>q$b7#d;*MS>HSEXgL^11Vw}xltVE3lsHK4XFEj1LEdPu@aq}5+lZDyC;X%t_z8}eS2ptF z5{an;I)ju*E}3v4!&A)ASc%g%d3d??$HSQg9Aua$0sF?DZh4C+n7bs;8y`1-!A5>+-Hg6A4+D$aSHh**N_$4FE)$ zCuyjT`yM4czr5?h4n~D7hn%RYaP_x!;si@@?%0v~B?LV&%J3Hn5%cqd5G$3Kv{}Ng zDvOF^WrE)O1S&;YGtQiz7%_eR1~XPI+<(9KcE0`&tj1nup%eWATib-o)wdaM2=f91 zW&k$ca+xrN5iGIS!q)DFUZD4P56OUS!YqvoUwvB;(U4~FA;6Va zCdi>2kU0~LrRBNBt?+ju)?Yna5mq5raH$nkxk-DGBUwIE^45W>vz1qH)h1dD01wTc zcg0aeeXz)hUwXJ22v~4S+B-v}7eRpOmw7wfD)Ym^i4P!%t==(=#z)SzE9vncg}`lOUlBAA_zOPJv&517!KH2`h~E; z4-e1&u*GL-dD5e?=6PS6^c8lXf6WP4vY&8D7DLcfljB{Ow;z=Vm!ANhNQm$Cn~Fa?5k19wxitrRLPv zi$uP3azsKm*~}=lV4^sw7Dx?3HWxavAm;2;C=5V5Dj=VctcS?wsaBnjP>mnb-~uN ztCD!XPl5h{K+_Hb7HR35B6;~XITz8K{-Cm z2px+E`x5RHlcGV@yC4QjRNjn8p=Ie~n$&@rMCNOfY%g7cRgw@m6F|*Lu&c#{Q1is2 zT3#ifb;9SX!U{pf~vm0abr#hR}(vEq7Scl=tPybndwLGl-&3&{yaD<8&jPULEx(9E{rKvi?<*AFU=lj-N5Op`Jo2=uxCY~`fCToO3}QAH(S zS))^mnT^;c2YC@WYS4;|IPVCq+F65L11}hlXLz8_i#(2^9%F)#tn?j1!&O?f;alkjD1O7xVM zNI*)Z^Wea{vxxZ%xlbEkF0V?sg27}s+7IS?c50dA6ZDsr=ZKGf%jVI$a-Kj=mf_u6 zr{S=$$`hjyWg!08qCG;JiCr#JMC}c`Kv#U(7AG7Ad{(UNpf6 zlV;p?29WAUmUx=>GueX~TFMq6~)t69>CTk<2hVRkqtn~N1qFQug0UW8FZEGrxZ zw=F?-Om?aISYuu0t@GaO^+hUg^TqYydXnEnlb`gjRRgSo-2EUc22FMXqRL9T?p6Q6 zcyk8Gz-b+*N8a~Rxf9E^_PLM7VIJxu^3G_X*lIZ`iZ5=#W4_*J-?~(f*%l5{FNIu` zto{sn`}xbtYs>JFd~AtXd;kHD&FE&G^gaTZK!iU2{lX zn=e87MODp0-gIR8Lb@dV2`;-~nc05iCrbvK6w`<;#R&lW3E0>Srm~u0&akr4W^`D> zoVD%fn@A4qr)K32>V4R0%)G+*!MNR_eJG9JCPC$V3~C zwGjwO5|E^2puI^Yc8`&3{K9=tVTU9eV{20lP`or$fbRlyz)wOJ^TVk9o$j=@_`IcR~@C&G!@&N?Y)zTF~! zSg9jW2}W*~Q17x#HkKrM8-=YsSgJeEck?mK;Ch=N-^HLu_bE6aw2lv-QOEERpb zHyMzF;(u}HWnKipVS8g>UOZQTK&h*CPiZqQrHh%C9SMh_RTlNj`>C5eKS;FJf0ENj z!4?;gH7jW|CQ1ehVMS$&MD%RoMwKG?n2Hhd18r5Gl z+xo*QNP{mf)lo>!&6vXil)4q$9t|N3VT+oJXTnw=FMC|JSAf;17^t@;vKVnrGQ*-^ z24bJ#3u}2L9|d35!?(s?xvIllL9JV%DScJV)vp&~04#f3#U+jiv=>97#To@;H# zo<3?ySVu^bug{11T(Bv0rzlGVU7IBrj=Sby=yS>DYHFfVw^Cari_y6znnEQMT&3J3 z&$ZvD_A4jjWNO$Li59U}WKQ#S^*OU%+fdz^9a~B*v8~gcQ5`{5?CK=*eW$|g&c=p& zYFF*tapiK@3;TRQ25!OJ<2U{uKUHyRs$wnvs@D39OAP zjQjNX>SnS)Y04xsEqC3w7TLMa44W}stAen-)3!N!+fP%Zlsv8j*&201S?2(TQ;p1G z$JTQg=ql-_5)|8*!kUQJ<}UfSdlzO0%okF>jociPpl6Fhn8{2na+Mhc1%&`ABa_S=r~FuM1S3b!R;3D%SK`oS2bTw!ZL^Vq=J zOl~R9)D)Pk`)*NQFi(I@qLgaWDIX?tj+42K^ddn@LAMd?65F=#CT)_dr#RjjWA4Xi z8L_|C(+WGDM#s|clvG8owYl5Xo5tBM zUY~wWZ}8>9JN%|_QU-<`Fa{AdBmn_{enKqOQ`WA#W2s zDX}t!*WxTa6;A_FV5U15+c33w%7OTDQ0unl6Uw6^LB%rhSen|x>ATnlk}M0R@E+<9IKZ8x0nij*Q448_g+m7yMQb{ASc&PZxNzJD*wD~EAw zPY8S^_riD<^R@>yPVpe7+p=yRKRgStQ}c~|D1Py#rN*T?62w;K3}uz)T$Qq9xPZeG z{%`If8&Wm~#SQHm;`D78J&%#M7<(3Hc~T%toB|I17#=K*hl^-Ia$LgdV3rSOnz-(3 z9M;LdEoz)?v+CBuvQ4}LMP!23BuNOw;?XM?sJTvO)ccp#*;Lskjk7~=#NJ|bt*_0J zVncLoHF~s}%oM-NnYr4t zAhs`eT{*h$M+j(1u}S0;NrK1vV*-^(P8!CkozHbN=KNMSPe)f6YQ+MMFL2Unsp_Cm z<+(57N1<*!@s06T5L?tZ$@B5+I|gkOrrggUHoLWM*XpgEDG;}Xc);aW-D`H_6rFAr zPwQ9cB3HnU3_aq^x;$X6i?$&FfwrlXuZ627hb&0wi_YPiCfpL9k4w(6)>Uox=Pf>C z02?|i+MDh~Aci+Wjmc1nZ{jJ~o6d`oj}#+r&IZ-0Lz9XNIY2!tzI!dTuWb1AlU2>L zLmHjMJrKSMx*4h|d*2__O_-jpco#IeO~>pl{~bu$u+sVp zys{?%%w)NFxSC^g)Z}qK3N}R*54P=R5!hv}T|GTc_ol}@B-0*GA7IAn@3tDYt}lM@ z;yKrKl~6nT#p)h{4^jJn4Dt)4_KSlxk-B!YIyerFxvrPfcGB zVM0*G(`HxplB|bt*C1Cr)zr#ToKd7#jXr z`MgQw4jF#KQDVhS+^=9M%G}!;@B@kWBJ;`9_HJD@tm~2wat9HZ5eYZt>QTQ`9TW!h zjt9N+zpt{n`{LYf8XdknY)p6uj2&ebFl(s@b^InBph?{)2_Rj@Y4z11y36QxOBMu) zfd<(Hwova|-S2==eh-Bc1Pt!j2Ao;b4wnW2n`{q-g+v@~-5iI%i!*UIeB&uL1L`Kb zZ`UsU%s$Db6Z5(bdKUU{z*UYRF>r>R{HxmYa<3OvYei8vv?xI5@vZ^WLoIb0OHR5S zElgV3Vm4*yfhQFa=qwMB{7&|Jk9X{9`LDu{hR~8u9QP%Z z{8nzs3J?D=5>DhyK7SDT$=yWt9sB6x=9M5VG5z<(2*M=?QaEesy|sFd`{h=7u^rE7 zwINMeO$MHRX&Nyb8by8r?oEhWTa_~tAL%Hi)E)Xy)fw)Z$7Z`;kFs4>HcD)7yaAZ= z5MfD`CqJglxhw22h&gL5(E0K)=ZGeuY>z&|h_b;N*JZtQre`^TD8 zZ)RkceZ%dmZ~@Pc)Y)4gT9n-9`FiS7Pvhz4(zIGn#HKdgd{mtumidG-^azs460e zWZ--1Q}h>4FILz~vfJP)F;eqw`2>GUAbx(3${D! z%QPAy>CMnh=3v@;vrU_`40Wj<=203S7h2YM2&95!5qy=@>Z1S*$++O#nr zs`>~ZaN{$6a=qR105N(Z0!MyW6V>K27QwQSLP@VO0ZHTf;`J?Pd@P>yLtJ&6LfBj= zke?}kPlo00B=|tkK=5%~c}w+XkRUOCr)zY|(tG!I$;R7g7(ylYvh$a=)SK&{)bqYq z?)YwL342#RYe(GZIYHcOI7JnU8onUIJb!7P>(y1(k$B)r0%Jo5t``xek zmdm(@6c2*6=pVmvv=i=8q%n9X7ED4!umpu|#Dlz23|Vh+X&VJgg;Ll_j(3lGm)7-G z17~UW22$Ie^p%S|wJn^xN=G7@SGg_YBC(q2%?l^q(|=-7qfoMA7b4Zq-3-^$W_6X{ z-d$~{1R@_C?emGk4HD7H#EbNIJu!}ZL&M4%80xIy9)9h&U@}%%(*w7_j(Bpj&IDf zUqn;b>x(pn>E9{@4A<>K4jvuM<;i!Nn2K^>$4tp(tVP#_-`}=GG_HPD2p$cq6eADd zjGJ}RF&}I3p|_oANUYDjyj0VuuS(n?cZ|AoXn=$nT&~ATK21?)Y(Jtp;&O&YhX=eD zTJQLZ_I`oX8xH?f;pu5luZ?vPNJ06rjpnu3K)+(!E@qn12`QSeGO!P3Ycj-T_0p^C zO3Hv6!st2qTf4*Klcb);=f~?Y+8*KHbdI|~R-E;MgWSLqusTicYC^rg#8MV_-;1t& z* zlsJmWCi~Immd4!3!g~GJ7ST#U#)!u4%)CSjvE7N{vP}-_VbQR-z~zV?&Uz|?i=vOG zOl?V?>SIOZCNiUI7m)KHyKW{M%3h0&q!W5*WgsP2bnvx_WPzJ zJ(YbWb8~F|k-nGeafS?gz^;n#_V{9N@Jz_bBBuH26ECWFlJR+Y^ZNuZD zD6lt1)I79ABW9xi;%)T%?a`;|&8174Z^S%E0z{WaPd`2WJnxY^+2qEZasT2#eUXGc zH$75!z%wghXo=%1z%IYe%QL5=GJ%|Lu@V;ZY$`H{t023-=wSM_L8|id>73Gry%S_e zv3U6McKs#?`2)HaYrJdDBG-DAprWzkA$j9wqSnJ3xDChnqt0Ryd-=OBDREo=s;Tq! zK$InqV2p2VjTL&`%@#^=%Ki!N)5AET=h@6UR22H#A`yVL)P4Fk9Bl_J#MYpSYE zI61k2*|m31NFA5-2!6rS`54%d6uVKIzv-%P)C4lHfy-?%$!&2-XA=?IaB{Pqg2U0G zTm}GW`^o8l;Uk~l{aOf#>r;gqaEet~#pX${aNR8@tSKxSuAJHRWagsa&)4@CEbhPj zZLKJp#{-DM(8%d*EtW^8Fy`*B?1kDw>6=zd7oIWKgl^gKTwgj*#?$0jC?)mi`8Bca zlTWwK)Ff`5tH~ayA9;n(n?&FI+?r%_v?)nfXN>?3xJuICHu_T-w_H;j*WSE<8_g@= zw!5w9u`<1n;5u;aw*_61981QiGqhq$gBJ!W7Qt=N$_OS-9j+2_=DDXjn7A_Ko@dR( z+J%wJ_Ig9J8!;5H)zZA@yJqj54U^nk9|W}Kb@b}TE)iRctIl?eP$V`Pdwdm&-5SSu z&Lss58|@hl4Flhui>DU}7_x7=vOf1QeI%cBb!oMxl^(_uniJnNXz&J5wF}LFyb24Q z%oZKs3h%R#s&@enDniDJZR_AuJ;ZTueW*bwO$5h>uA*&r_n^~3BqSmmjvwCz z*==WzD_iIqLk)WMkJu${?OZZ-Tf4_w+|Q9!{{2IgUp&NZ+FzcTj849-i)n*SP^0u5d033FdJ|Qxl4(6bK6c6~pZ( zPpdOA^Luf1jZ*^2*`TLWA(oMWD|cxT1~!kcoNG!i>-2;59ox?{=g(%;7S&@I zJf<364!!BQ&V2R+IclXDNK;~KjYZ>f8AwgpS{ji0k=*qsJd`%GZC~A4*34VGvmE!% zX7~ElcSAS&CC@G-n${%yz9%O1X4E*Vf!-L;Uhk3+ zgv{#QIHRz}^4e&z{;Ot=Jh5W&%x&1cLVc)*UjHQ}k^xVScpH;X>Yq?9**j(!j~twC zN2f{oq6v=;SN=o5WsP5)9L*`-WolUHnXrlobSmsmCf}`Uj$YlY7bE*z^E}{ndGkw1 z=mzKWJ<=um0y_A2fv}VxI-&ic^+_8U5cpbt5=3Jg3TdfIV$zW`1Z0(! zjpD^VwVyl<{3x%x^W4z5Fgap{aCQMg?jg$%W;f8g=(QO~ir%1>GQSYYqEVh^%qsTo zxU2>7#1_w6~o&zs)*j2Ebw1?R|j#H?kZ$z8B3*S21K_~^Ot zAn*QG_}7ohPbe0)#6mIR`LoriN4e|AB*gT{Cgsf%%*yPaxZHM_xWb%3J}ITQWatSm zH1~Wi>RD;~)u8@;TbGAPzXO9Ir%>ol>$W7`Tq=;OU8G|11>(BP#kU1O{&#_tv)m_n z8XZ%)vb1I}L@fQI)RMS4&&vhn`JYhYI-Vn!FYr9{m5v4u)vb0=_W|iSq>!=Z_(oeo z@=UdHSGtb3U?KMXe!xTKD-++r2qeKZX%Q{g37wRHRJ`1+-hM5D{p3h0T`Di(XFSQb z2+}*!hb$Arhwf0O~vOO{p2x24YE zVG#C2HYpLm0-If4pZuji184t|T}+lgD&nPkBKhHo@ECkJ=Z=Q$Er44-!!;#5Ko{5<+Ef%_zpr zD>BomG&C$?q<|O5gScYIF9CP1%+FTcBvdk!XXa%9jzTZ`NU<}35AK|ScQpD)TR>Fa z-{|Ut{XrlGQW9UI4WAFgnc-Yq^J`4rWYLZ{TZIUvj}VaFIRawPBn9Zn45m~3csz2H z@B{v8R^Hlc+Fwe}iw0NRZpIzdm z2*2s`ZnPU!L_dus4{qtE&JdQ% zTft9GF|^1L$OqPPaF<=*^1+xi7PWW@E-Y@B4xco|r8 z7W;qczhz77@P5ds{SpUw?d!GDnS!8T(TU4y60@JXt;VxT*q6#(2io7~aX%a4;7oqp zB$=Mf&n+>}KU-O|E4sa2mEYt){g4f8+sQ@Jn<@2h_g>+E<;hv+L6VX}G(#0XS#h0E z?8IXY$uGwMzF{yk^D*cI5$B;Zl$Kv#o2ms}JhgQqx3YDf4A-YQ3|t?J2dJ3k?-UwGYfVB z4rZFrqjUQ`=gSQu=kv)mG6HM8&-N&ap$hZHqA_-}-nIRk%k3Hk)uM)0k*J1DxnL3K zc)U--tKu00;5s%{$!1%|$`@)Bvd5?>3%<1ob{rvbX^ouT-9x`xdNyE`g4U4Ip!Z(K zMe3VgvMp(3EqFLs?%JPWvONP8VG`{uLwDplS!Y$ga2c>8>2q6oh3M zbL@6s1OoYa)pH7WlD<_nuSuJ{f+MTqnYzf(c_W{p3xewPS-EivJ8mQ*93@K@Ox835 z?$fq?o}JzX78~&V&614C2|3IwT@#-hOlveE>R%wld8$y!%{Hb2dhf*rw#_-^>CXEj zC>}|*AkJc?N7M2Mlgz7oOD`(Q*NY13zEE3#LcXABu7K-OJvAedQZMRrie-(nm*py4 ze%9@cxSQ3dtK*R$YQbHE5v%vnKXCo4uBT}PR>7P8P`(|;x4dM8}wSN zOO0{ebhp;e3$iQIloFe`9KSIQsqy^stm9HaxBV)e*cZ?ZAK@+k3{(qU&!d+_?~yNJ z6*P8t>bfl(f z+CsPWsO@$hj}FJc>PSFpe23RYb(D2w=~9lEz{dH`3O4zN<(YkB||h8&l0eHF+`TnJp63Blwh z3iW%K0jToWdekmwn8LvQQAEsx+IXQZeb-*cfTq12cfq4hZ_|ze7sInB?l6(GbVS|E z>KcEdW|FuuEjkhqFx9-atDkD*WTkda9UE#p}w- zZ=&(&ZV}O)uz@c=MMLb=9sCdD&mwq=-YyEtxUIzNBEL0jWEKQuYmpZeNqEKjH$%2D z&sGXKoEAi)CPK?eT3v82=Dwilrs&b%ZT9lw} z);m}m>I+w8lR%(Pz=n?x=iNB@n>LfxPTLy6^dX^nR!tWZFdvVLj=#*aCK!7vC6%J4 zGmxKy-CloeppYX;KFQfdv()fZk={d_I}eOZTz;?5L8bT^gl^QXOfG|41{+(#jGXR%0hti??994;1B z>7JGK=oN=uX&LL~ywkH;odYk8infi_Kz7CLk%BVr@1iNcP>|^}1Div6Tg@fk8e-B0 zT#I&`IK(p*KPWd6?(Hwb2LLsBYir%OudH2B{O()<(h$Q{0-|Rrpn3{ zJ3+F^)5&?5u9s6$#%{2Bo;UB^z>9;)ByFx&x9qr%t>2@?XlB$b9Rm)B^%ZuhT{ZH| zv)ih-^mcxkJq6g1&(_%$z=iQx`DB-`d4;5w^Y<`mdFqlGh2T;gw%0nf+-Y{SGCS){ z0>Za=<=sj8iDVMVwugC5Y2~gP*VOL2=R6GX3laa0D99CUgmN!FlDF1>ON@G>nYg$8 zpe2TzM|G>~D!u>9h4M5(^3$PLXx>mwqxLO*;a38OP&P$;rWhHCnz|(N!TB zo3L4<M&43JAgXd>)xbX+5F(L#({}lGwuD_v$3nzb^wdOF!qwzQ;NvDQ=;tdc zb@XgEx_JxaXJmu8Q`CxjQVQM7cN#l8u@?fS1DMuc1!idRh|3dmmc9Kt>vmRbj#pym zgO;Fa+4pnA)>$i^ZFM#AH}hsAPujK4UhUJ_ir3BXG<`sMYJ*A%+V8#9*KK!i)*8He z^5jhV<6y~jR_&|ZR&tF3(+vfjlbLzV2Gsl}+lDHqIl%yb(TzQB!k#NDI-LRZUYgV; zF4U0zu5BffS%tz5&$*c6wZC$$*^jBNoFXRWQx5K2Q(j%)IC<@KN3yoL% zKR3k&XP#-?GVmyVZoR~E@*EDeJ$}Y^C*Ia-1%sNO@91`Xuc49F$hZO*i(iR#h>W%( zwk}he3@27^ouF2*j^c8mMG5y@YOnzFFGU<*Kb4V{B(d6OMDF7vyR$M>X%+CuHM5|u za%sx3d0c!g1}!km2?;hE5NKC3>e*|HvR(M(Y0~u82N}k5M*lm6&9PQfiwq>ncn3Rk zpJGim$rA6?sdvxX^rbx3cmb;re^vY1@)E@2VFmxF?njQf4}Z;C#bR4Vfeo<34#RDPU2SYxK*XcUiq4J)ogncuaTP5 z+SX!daS>OHo&O}&9CdV2b7A??s#rk->KY|D_wwRrV&6!-*G>q!4JN&ZondJ%!!B!z z>I&kW_(@j-BM-pqZ!0A{#u&<^2|$a;eG;kfO158%uAO*1n05ltJ;7~Nj$|ev1ZaX^ zyon^ZL5_=X5qdOoS{$VVxoIOTmA_?@mxB&_Rwt}Tu!5dG`vD^Sl_v+U5i=*4?BBAnev}$N!y=<>E`FJ8!a|bt2IqV8Zx&Du7@xpI}!5A~EDz`}!g< zy~xh1dMA7rh=Atozi%$h8g?;F02uJ|K8@jefP4DJ1Gg@LYN6+jk@5npb2#FA9Z#f< z>*8@=R?zyBb5u8&fg%2iXSal7|A@%NCe{-SZ|#Nnj`+6WX?zj9c*6GtsJ51r;-8{% z)ITrqDB)+q&_HHV22EvvQP)e3Co{C%KSHl1oBSuMeq#53JFCJ6&8F0=_8eqx)e?p? z%mrj-X@h*RKoHI3Nby28=```_?kNHL3m^~J5wb3onDFDi31pVjp1d}9rn=cv5Ug6H zAa>OxX8LwM5lR|Wi`@4|MWAXtuwIgD*6Ak*T1hQc_87s*3vB)`)bXt{hiiuwRA10} z9WTsgb}(T$`qE$e3ZRQBlN1l{0y|wSn@`5_aPmQQ^(S z(SLELHeQ2bqvA}Iz%#!Pe}0Jj^Atgrc-G0sCxmv?+fu`PSdfaaHKmdpZBZ;-pYI88 zJxm!m=_@J|B0u62cJ^_8N{ZC-+b@@cq@fCvLJ!pwr8VTuH{Vz?f*4w^_`+E>NE&>M zf$J5o1F<&Rt~}6@hhZ+E`Ti;Ha=`U_Tw+9iRLXPaEUHiPQ00@sKQb_{#iXSMSb^=e zEszHo9RJ8N0%!Su+Pm_9D7(LpuSB*%BxRW~qs5XCH?ohIv9{PnmYS5^nCxYp5s3?> zLe!ul#3XCV5VAIuJz1g=V@Z~5-!t9!^W69IJpaJ+!`F|l*POYo>zwmG@6Ymn&*(u$ z3=6xxpp?)6%tG_GV2$W9w)?(2qVF!Hj=YW>IiU2whT=;qe}N;8c6H~ID2Im)Xp2yB zYkFNZd87f6M?`MPZ+g=dXOl>1G)+@K$CEjH+o!{`k-BBVu|5;fxQwp~U2 zBkH-QUrHlvxC}aFO{#MvNt9B}Q#4sfA&nA4-i4Y&(kE3tHH>I75XXD8y{EP;T?zC3 z>-&zuFYuLD0Xn1Rv?DyYdEahDwEF><7I~QH8L+kCO=iGU1{n#Fj1!C!S~fpE55li> zaXY_8(X}x+Y;}c!={=UVgpwi>Xw-muv1oH?dXu6J&1=Jw)(Cm?6U^ZB30BW5Ht1^6 zV>5ON?xLe9Dplk@RF;6q)MTMP8hf!{@+CESlE8T`3ZxhWz4KFAVTa>M?KpUi@a=mR zwNg!N$7&?fDWzm{CFmY$x!Zs1{bg=FX2&{h|67v=%OyK?2Ldl!?+aEX)27tp)S#f5j#SE$|uST zRBN9fE5~H-3wDbR@oEbN;XpjH<4$O&!T4?BbsTlH2NR-46M$;7EVg37)Dsqt`pN>w z9~OkavESMK>>L|`Kn^@IcX1tECk~JEDlP zullx2o~f`yM+>KXmfK_~?)&k#!VX%xN4pd`@RWqVvoz}B*Rdt9s&xqXQ9+$Bwu?+7 zz(QOpH=D3vN^~HBFzZs-@yR;FKrWf#!p-T@tTYG7X_uo5AL^ z9xd5>Q5=RhDkb-7OT_8c1LWHiPFb@*CthgG*ZolPcJ^-K^UATRGT!7Z2$U-yJdNw>b^Az)g+pOGelm zw>`*7)LA_NDaP*D+eCQxF>om&CC`y_IU0-@VVT!nCM3mZW58z%4}$~UP~4(i8ug}G z~+N|e%PLt z@m54c6~6j9HNp5-6q!hMf=X6%X20E(VmuDm&tVe{CQK|MKm94}i`!s#>OlO70?aS+ zTk+4Fn?1hTD@kLvO%AB=swT|wte8ZL+QoO1vV_WkpmL4Zdy{S~b4>UUAIPLE-y~O| z>IUQejtrX&7kn`swA5#l)+l}Yp^l1LpVlt^6je5Mq9__$Da;1@CJo+06q{_6D@t+$eMNA`g)x4#pa1Y1dn2XZ^QAA}AcM#} z95ZBc--1>LWe(IniX9!PdMF;DWAFgsZ-ogp)^MVos4BC$OL17c8gUjQjWRpfDYWXP zZ8&X+xn^vi&;KIhq5$aMk}_J&O)5@6GHOok>xs_d%rR%2h!%~p6?i=}sa5|xHd3L$ z!_FO%;42@fpTio7*2(Xrs28s0k_)PR!&EazjtW&_Mg5)ZXuP~2Z8mb;rDg4ZtAlCp zd@Gu!${~eRic|4$5wC>n>M)ky*o1C9Qcaek?kP7kWd3@#x$y&O$KsRS7C|6+)DD$n7T2BA6u9j`aD#RX z^gpIw6xc{W-1v2*u}mkQVV`sx4!63Orv4P)a*cZQc29 zbIO6!-WW95c5*ri#z9^02gU0`Y|)O+;B6KDyey;o@hZI=!d~DWp$Y^*e2r z>%%hELr%7DUBz@>kU)9NOB8K;BPGiDamUJ&vp9?HtajG*7Euc}f4NILg-_l3aC>;2 zyo-JRi+3OTE#RM?R?aluftE`%KJYVlq-CBdCtgqLxWKw0=C<+ur+iHZq3uts+5bcM zOn@V@nl`U8)NxoXN3Ex1wJ2Xo4rMC=dtdwRB3`C9KuHU|ZGjnzg|G3ICSJR$yqGca zN4HVE(CI%!H4`ETQhYyGek#j;dMa;N{y2g&(FlY+mby7ec0r+({F&!|nW*++Bb2;c zt6dGD1YmMk=%$tJg1=idHcL3Xgj+y8g*@Qj6>Pk@xG*mlpq@qEhZKi<)Gugu5%HIL z9XP~c?8U_XnmW1d+T_bmO3c|UP2isZk-!XO4Quu$KH+C;1%(xvc~>z}?nrh+@^7Iv zZjQn2FyuIttHU9S(25ED>lCQlm1%?3H2K!~Hv-7y& z#*e#$FD5tnp9p#~Qkd&}m3qrbbYhoMmZvJCeVPFgxQxWA#S+@A4f;AW6h`B;=7wp; zrWL~~m09{5e*Au;{Lj+3B6C4lc2KOdmo1VN#9`vF4;Q>kSu#yJMSXbe-+kQ9@i0AFGwRE;HVAfB8(#2#V* zIQ4;~G`2`Rp)YP4mt*!SDzYZDHi&#sQMz3z+3zvT8d=5+ygn-TTd9NdNOsy^to;SC zkp)2yISd^hKI6Ekhl1hTg<2P>ZX6d*M z%5O?nR$aod;HL5?%?4=-tmCiGpBdgAxdbvece)PQo;%I_l9{!eY7Z()f>^pYpMbOT zF+uWO0h;+%eJ(w?r55n=wpCcfjgEIUys37m_5KDQlMox47G$0}8BiALXNIC*#t^Z; zjE?O|e8DrWeX7JonSGnNyphc1y_TVhM-ygqn}!bYG8R0Pw9hQsKm;EBd0_QWtm$2P z_SilA7>N+?w z8a!$q$un@)Wh)v`>;jWPER87x2Ko=4xv$9QGOf)rgn)2sniF(qk8AJ6H90Rd8NU#D zbvysuf!u2o7eJ*g9UT3IlU{@NOgqJ5!$~%1g`e8MZ+r#$H{XuSE4eHHvxs{v@B?R8 za)>U7*^Sj8zb)^yWWeb`n7+w~dM5G49OuXUa#$N7Lo#}31|Y=rH^)JcyJ{i2JMt9Z z3XQwivHDV{1=fQx%Gh6)w6o`PI^)V6E&}R(?`=A2q+1tl-!Cpr7sl+v+UwJzAOeK< z|JMV@z84T94X?*ol}2qTaW+keot%cx<51^iTBDR}%2b0$TXVx*uTt@Q5P|{&O`&h4 zVTX5t)o^6^h5#&CaBqsl%GPg_iD@dPA+yPRIE$;acI|z(juq`N2Dn0~Ku$bAf3@f& z48)^G6k2~s6kHC-ZO?RBOo|Y#6-h@_9>7TsJ2|q4$ZTH zR2CjQSzZ7ahgG_+D`3{f+y%V;+mvLyYDsFMy9}bsyELOozgxd7ozxzeqt(YK%9O9+ zVATL}42QglLOR_Eb&?{ho^X15>9dV9z-4V|{Gq4!#n(sCNHF6g z;&bLPU@;3A(Gu6VkTQt+!*l_R^2gvyNyC|M2$`z=W1h!c{ZuIfFY%%k-pd;$m}+|{ zc1j+S`=!J>D>vmFz^{IGX6#B=K$tYA5jS?I{t20W!2P5^3aN$gnUxW#>%ojkzl-q{ zibXb}$s^Ok?VW;``W{0fcP5L@*YsU5Bu{IFY)Ez`)V|Qm6N#Nav9_*;8rh2;tAG@q z)!-1A@~;t7b<&djJ1a*SW=OL`^j#REn7Oc-LOo!4F%-^U$94}T?C>3Q2xpjZT z&WbZk6ciRl;%lw(Pmd*Iy};F*}%=xX*G8@0cO0Ca!BO#%EmiAKomxj=V;Kg)dzh~srkbQiM2eM9d3Y(O? zoJ)>J1?MKt`CBheh^Wd-mZc=b7L9?E#oMp``YXrEzJc~uRGk8y2jkGEMI@br{6<|! z0h;XNAc#%uyJnj$$|P6&@@>CdWP%4nQTkqdOZkEJNRB~c7M5Kx%-;z3t+en2YH@*D zBoFFgdiljZDc$MxW#0r#dsUv)(3XL|b*Lh3IZu(2r8Og0xNp@{pmFIM^88T`WsK8i zk8v2&g(v=}t4hHYFzHr5{+N@OXQCFdR5C^7toVYue*oLiV$%g;c^#=K;J}0PCMMP8 zyap#5!~JY|++5Zn^8d+6j5_Qx8B z#u$shFN41cDn73J2g1kGvcxO6gfT7AutL!LTz~vwo})5J-=||@OB~mxH4R^Erq*|* zP~w4AMx7L$6BCiYtJ!#!*D1C%mH^H9CAc_$~7c);XC!cM^}8U z@fq#2_dn8euMW)!U98~UFtE1`c_86jjtv3TJ2NExpV$C8oG(Qgqg-J?fE{t^hgr7*ZHbz&iu=kcJpV8Uf1~( zu7n-!)V-_xu*PK2kcKhyuF(D2Ahi+??3p9S<3|ntyE0;x0=}rkY4wP5x$)8+9qo7B z1>HROb^LxE<-m-gZ#a9e-71#Bo3B|}$Foas=rY@<7Ju=z2?464!fceP02u`@mvI@+ zGzbio=Kc1`Q6}gamh@a2&ldg92mbSx{=YAc7VUhhisy2HSb&4@{_d$6fec-0-0cq; z0&e7Je#akbyRB}s$jAL-<%4Qo<9)*bscsQKHXJf4x!Cd$3)lI!9GeMg#FH%G4`XPK JF4n&g^>1GqEK>jg diff --git a/website/blog/images/independent_backups.png b/website/blog/images/independent_backups.png index e9760228ffecdb0a88a7232cfe4d456efc0b41b7..9221f157d46bcca25df258f636770febea921cfc 100644 GIT binary patch literal 237244 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

  • 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ⅈ}`xF`&&vG&ym^+) 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

    qMK`b9{ErY~My6v1D_OphkU81jiVnKp!+|pK5Yg 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

    Y!YF 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 Z{{y{=Urufci8cTL002ovPDHLkV1kFYwl4qx literal 34941 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 L{SQ4j7<&E>I8hsz From 489ab6f1c0db3106b7c2f9ea48b3766e2fb18338 Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Thu, 18 May 2023 22:05:50 +0530 Subject: [PATCH 03/13] Fix font-override in blog and docs (#3448) This prevents it from overriding font for code blocks and helps retain monosapce font for them. --- #### Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No #### Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [x] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- website/src/css/custom.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/css/custom.scss b/website/src/css/custom.scss index dbbfd54bc..5d897fbb5 100644 --- a/website/src/css/custom.scss +++ b/website/src/css/custom.scss @@ -6,8 +6,8 @@ CUSTOM TO THE NEW HOME PAGE @import "icons.scss"; @import url('https://fonts.googleapis.com/css2?family=Nunito&display=swap'); -* { - font-family: 'Nunito', sans-serif !important; +:root { + --ifm-font-family-base: 'Nunito', sans-serif; } html { From cc35b1ed97f924630875667eeaf852284f42db17 Mon Sep 17 00:00:00 2001 From: Keepers Date: Thu, 18 May 2023 12:21:57 -0600 Subject: [PATCH 04/13] add global throttling fence to graph middleware (#3432) Adds a graph middleware that blocks all calls based on the most recent retry-after header in a 429 response. This prevents us from failing on 429 requests due to external pressures even while the corso client believes it is within quota on rate limiting and concurrency. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :robot: Reliability/Supportability/Tests #### Issue(s) * #3407 #### Test Plan - [x] :zap: Unit test - [x] :green_heart: E2E --- .../connector/graph/concurrency_middleware.go | 143 ++++++++++++ .../graph/concurrency_middleware_test.go | 210 +++++++++++++++++- src/internal/connector/graph/http_wrapper.go | 1 + src/internal/connector/graph/service.go | 1 + 4 files changed, 350 insertions(+), 5 deletions(-) diff --git a/src/internal/connector/graph/concurrency_middleware.go b/src/internal/connector/graph/concurrency_middleware.go index 2756a60c6..ba2a08fa6 100644 --- a/src/internal/connector/graph/concurrency_middleware.go +++ b/src/internal/connector/graph/concurrency_middleware.go @@ -3,7 +3,9 @@ package graph import ( "context" "net/http" + "strconv" "sync" + "time" "github.com/alcionai/clues" khttp "github.com/microsoft/kiota-http-go" @@ -200,3 +202,144 @@ func (mw *RateLimiterMiddleware) Intercept( QueueRequest(req.Context()) return pipeline.Next(req, middlewareIndex) } + +// --------------------------------------------------------------------------- +// global throttle fencing +// --------------------------------------------------------------------------- + +// timedFence sets up a fence for a certain amount of time. +// the time can be extended arbitrarily. All processes blocked at +// the fence will be let through when all timer extensions conclude. +type timedFence struct { + mu sync.Mutex + c chan struct{} + timers map[int64]*time.Timer +} + +func newTimedFence() *timedFence { + return &timedFence{ + mu: sync.Mutex{}, + c: nil, + timers: map[int64]*time.Timer{}, + } +} + +// Block until the fence is let down. +// if no fence is up, return immediately. +// returns if the ctx deadlines before the fence is let down. +func (tf *timedFence) Block(ctx context.Context) error { + // set to a local var to avoid race panics from tf.c + // getting set to nil between the conditional check and + // the read case. If c gets closed between those two + // points then the select case will exit immediately, + // as if we didn't block at all. + c := tf.c + + if c != nil { + select { + case <-ctx.Done(): + return clues.Wrap(ctx.Err(), "blocked on throttling fence") + case <-c: + } + } + + return nil +} + +// RaiseFence puts up a fence to block requests for the provided +// duration of time. Seconds are always added to the current time. +// Multiple calls to RaiseFence are not additive. ie: calling +// `RaiseFence(5); RaiseFence(1)` will keep the fence up until +// now+5 seconds, not now+6 seconds. When the last remaining fence +// is dropped, all currently blocked calls are allowed through. +func (tf *timedFence) RaiseFence(seconds time.Duration) { + tf.mu.Lock() + defer tf.mu.Unlock() + + if seconds < 1 { + return + } + + if tf.c == nil { + tf.c = make(chan struct{}) + } + + timer := time.NewTimer(seconds) + tid := time.Now().Add(seconds).UnixMilli() + tf.timers[tid] = timer + + go func(c <-chan time.Time, id int64) { + // wait for the timeout + <-c + + tf.mu.Lock() + defer tf.mu.Unlock() + + // remove the timer + delete(tf.timers, id) + + // if no timers remain, close the channel to drop the fence + // and set the fenc channel to nil + if len(tf.timers) == 0 && tf.c != nil { + close(tf.c) + tf.c = nil + } + }(timer.C, tid) +} + +// throttlingMiddleware is used to ensure we don't overstep per-min request limits. +type throttlingMiddleware struct { + tf *timedFence +} + +func (mw *throttlingMiddleware) Intercept( + pipeline khttp.Pipeline, + middlewareIndex int, + req *http.Request, +) (*http.Response, error) { + err := mw.tf.Block(req.Context()) + if err != nil { + return nil, err + } + + resp, err := pipeline.Next(req, middlewareIndex) + if resp == nil || err != nil { + return resp, err + } + + seconds := getRetryAfterHeader(resp) + if seconds < 1 { + return resp, nil + } + + // if all prior conditions pass, we need to add a fence that blocks + // calls, globally, from progressing until the timeout retry-after + // passes. + mw.tf.RaiseFence(time.Duration(seconds) * time.Second) + + return resp, nil +} + +func getRetryAfterHeader(resp *http.Response) int { + if resp == nil || len(resp.Header) == 0 { + return -1 + } + + if resp.StatusCode != http.StatusTooManyRequests { + return -1 + } + + rah := resp.Header.Get(retryAfterHeader) + if len(rah) == 0 { + return -1 + } + + seconds, err := strconv.Atoi(rah) + if err != nil { + // the error itself is irrelevant, we only want + // to wait if we have a clear length of time to wait until. + return -1 + } + + return seconds +} diff --git a/src/internal/connector/graph/concurrency_middleware_test.go b/src/internal/connector/graph/concurrency_middleware_test.go index c5734a665..5e19f791a 100644 --- a/src/internal/connector/graph/concurrency_middleware_test.go +++ b/src/internal/connector/graph/concurrency_middleware_test.go @@ -8,23 +8,25 @@ import ( "testing" "time" + "github.com/alcionai/clues" khttp "github.com/microsoft/kiota-http-go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "golang.org/x/net/context" "github.com/alcionai/corso/src/internal/tester" ) -type ConcurrencyLimiterUnitTestSuite struct { +type ConcurrencyMWUnitTestSuite struct { tester.Suite } func TestConcurrencyLimiterSuite(t *testing.T) { - suite.Run(t, &ConcurrencyLimiterUnitTestSuite{Suite: tester.NewUnitSuite(t)}) + suite.Run(t, &ConcurrencyMWUnitTestSuite{Suite: tester.NewUnitSuite(t)}) } -func (suite *ConcurrencyLimiterUnitTestSuite) TestConcurrencyLimiter() { +func (suite *ConcurrencyMWUnitTestSuite) TestConcurrencyLimiter() { t := suite.T() maxConcurrentRequests := 4 @@ -71,7 +73,7 @@ func (suite *ConcurrencyLimiterUnitTestSuite) TestConcurrencyLimiter() { wg.Wait() } -func (suite *ConcurrencyLimiterUnitTestSuite) TestInitializeConcurrencyLimiter() { +func (suite *ConcurrencyMWUnitTestSuite) TestInitializeConcurrencyLimiter() { t := suite.T() InitializeConcurrencyLimiter(2) @@ -80,7 +82,7 @@ func (suite *ConcurrencyLimiterUnitTestSuite) TestInitializeConcurrencyLimiter() assert.Equal(t, cap(concurrencyLim.semaphore), 2, "singleton semaphore capacity changed") } -func (suite *ConcurrencyLimiterUnitTestSuite) TestGenerateConcurrencyLimiter() { +func (suite *ConcurrencyMWUnitTestSuite) TestGenerateConcurrencyLimiter() { tests := []struct { name string cap int @@ -118,3 +120,201 @@ func (suite *ConcurrencyLimiterUnitTestSuite) TestGenerateConcurrencyLimiter() { }) } } + +func (suite *ConcurrencyMWUnitTestSuite) TestTimedFence_Block() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + tf := newTimedFence() + + // raise multiple fences, the longest at 5 seconds + for i := -5; i < 6; i++ { + tf.RaiseFence(time.Duration(i) * time.Second) + } + + // -5..0 get dropped, 1..5 get added + assert.Len(t, tf.timers, 5) + + start := time.Now() + + var wg sync.WaitGroup + + wg.Add(5) + + for i := 0; i < 5; i++ { + go func(i int) { + defer wg.Done() + + err := tf.Block(ctx) + require.NoError(t, err, clues.ToCore(err)) + }(i) + } + + wg.Wait() + + // should block for 5 seconds. comparing to 4 to avoid + // race condition flakes. + assert.Less(t, 4.0, time.Since(start).Seconds()) +} + +func (suite *ConcurrencyMWUnitTestSuite) TestTimedFence_Block_ctxDeadline() { + ctx, flush := tester.NewContext() + defer flush() + + ctx, _ = context.WithDeadline(ctx, time.Now().Add(2*time.Second)) + + t := suite.T() + tf := newTimedFence() + + // raise multiple fences, the longest at 10 seconds + for i := 1; i < 6; i++ { + tf.RaiseFence(time.Duration(i*2) * time.Second) + } + + start := time.Now() + + var wg sync.WaitGroup + + wg.Add(5) + + for i := 0; i < 5; i++ { + go func(i int) { + defer wg.Done() + + err := tf.Block(ctx) + // should error from ctx deadline + require.Error(t, err, clues.ToCore(err)) + }(i) + } + + wg.Wait() + + // should block for 2 seconds. comparing to 3 to avoid + // race condition flakes. + assert.Greater(t, 3.0, time.Since(start).Seconds()) +} + +type mockPipeline struct { + resp *http.Response + err error +} + +func (mp mockPipeline) Next(*http.Request, int) (*http.Response, error) { + return mp.resp, mp.err +} + +func (suite *ConcurrencyMWUnitTestSuite) TestThrottlingMiddleware() { + retryAfterNan := http.Header{} + retryAfterNan.Set(retryAfterHeader, "brunhuldi") + + retryAfterNeg1 := http.Header{} + retryAfterNeg1.Set(retryAfterHeader, "-1") + + retryAfter0 := http.Header{} + retryAfter0.Set(retryAfterHeader, "0") + + retryAfter5 := http.Header{} + retryAfter5.Set(retryAfterHeader, "5") + + goodPipe := mockPipeline{ + resp: &http.Response{ + StatusCode: http.StatusOK, + Header: http.Header{}, + }, + } + + table := []struct { + name string + pipeline mockPipeline + expectMinWait float64 + }{ + { + name: "2xx response", + pipeline: goodPipe, + expectMinWait: 0, + }, + { + name: "non-429 response", + pipeline: mockPipeline{ + resp: &http.Response{ + StatusCode: http.StatusBadGateway, + Header: retryAfter5, + }, + }, + expectMinWait: 0, + }, + { + name: "429 response w/out retry header", + pipeline: mockPipeline{ + resp: &http.Response{ + StatusCode: http.StatusTooManyRequests, + Header: http.Header{}, + }, + }, + expectMinWait: 0, + }, + { + name: "429 response w/ nan retry-after", + pipeline: mockPipeline{ + resp: &http.Response{ + StatusCode: http.StatusTooManyRequests, + Header: retryAfterNan, + }, + }, + expectMinWait: 0, + }, + { + name: "429 response w/ negative retry-after", + pipeline: mockPipeline{ + resp: &http.Response{ + StatusCode: http.StatusTooManyRequests, + Header: retryAfterNeg1, + }, + }, + expectMinWait: 0, + }, + { + name: "429 response w/ zero retry-after", + pipeline: mockPipeline{ + resp: &http.Response{ + StatusCode: http.StatusTooManyRequests, + Header: retryAfter0, + }, + }, + expectMinWait: 0, + }, + { + name: "429 response w/ positive retry-after", + pipeline: mockPipeline{ + resp: &http.Response{ + StatusCode: http.StatusTooManyRequests, + Header: retryAfter5, + }, + }, + expectMinWait: 4, + }, + } + for _, test := range table { + suite.Run(test.name, func() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + tm := throttlingMiddleware{newTimedFence()} + + req := &http.Request{} + req = req.WithContext(ctx) + + start := time.Now() + + _, err := tm.Intercept(test.pipeline, 0, req) + require.NoError(t, err, clues.ToCore(err)) + + _, err = tm.Intercept(goodPipe, 0, req) + require.NoError(t, err, clues.ToCore(err)) + + assert.Less(t, test.expectMinWait, time.Since(start).Seconds()) + }) + } +} diff --git a/src/internal/connector/graph/http_wrapper.go b/src/internal/connector/graph/http_wrapper.go index b0bca76e2..bc30e88e6 100644 --- a/src/internal/connector/graph/http_wrapper.go +++ b/src/internal/connector/graph/http_wrapper.go @@ -147,6 +147,7 @@ func internalMiddleware(cc *clientConfig) []khttp.Middleware { }, khttp.NewRedirectHandler(), &LoggingMiddleware{}, + &throttlingMiddleware{newTimedFence()}, &RateLimiterMiddleware{}, &MetricsMiddleware{}, } diff --git a/src/internal/connector/graph/service.go b/src/internal/connector/graph/service.go index f0aa71f08..4335972a4 100644 --- a/src/internal/connector/graph/service.go +++ b/src/internal/connector/graph/service.go @@ -268,6 +268,7 @@ func kiotaMiddlewares( mw = append( mw, + &throttlingMiddleware{newTimedFence()}, &RateLimiterMiddleware{}, &MetricsMiddleware{}) From 6b7745745ae59cd68d2d8a557597c65781ce7009 Mon Sep 17 00:00:00 2001 From: Keepers Date: Thu, 18 May 2023 12:49:44 -0600 Subject: [PATCH 05/13] refactor api options (#3428) now that exchange api has been folded in with the rest of the m365 api, it doesn't make sense to maintain an options file with only exchange functionality. Since all calls in the file were used 1:1 with some api func, those options have been moved into their respective api funcs. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :broom: Tech Debt/Cleanup #### Issue(s) * #1996 #### Test Plan - [x] :green_heart: E2E --- src/cli/config/account.go | 4 +- src/cli/config/storage.go | 11 +- src/cmd/factory/impl/common.go | 4 +- src/cmd/getM365/exchange/get_item.go | 9 +- src/cmd/getM365/onedrive/get_item.go | 4 +- src/cmd/purge/purge.go | 4 +- src/internal/common/slices.go | 23 -- src/internal/common/slices_test.go | 30 -- src/internal/common/str/str.go | 58 ++++ src/internal/common/strings.go | 14 - src/internal/common/tform/tform.go | 25 ++ .../connector/graph/cache_container.go | 21 +- src/pkg/logger/logger.go | 4 +- .../{exchange_common.go => attachments.go} | 18 - .../services/m365/api/{api.go => client.go} | 31 -- .../m365/api/{api_test.go => client_test.go} | 35 -- src/pkg/services/m365/api/consts.go | 3 + src/pkg/services/m365/api/contacts.go | 81 ++--- src/pkg/services/m365/api/delta.go | 11 + src/pkg/services/m365/api/drive.go | 298 ---------------- src/pkg/services/m365/api/drive_pager.go | 325 ++++++++++++++++++ src/pkg/services/m365/api/events.go | 22 +- .../m365/api/{shared.go => item_pager.go} | 0 .../{shared_test.go => item_pager_test.go} | 0 src/pkg/services/m365/api/mail.go | 72 ++-- src/pkg/services/m365/api/options.go | 214 ------------ src/pkg/services/m365/api/query_params.go | 26 ++ src/pkg/services/m365/api/users.go | 106 ++---- src/pkg/storage/s3.go | 5 +- 29 files changed, 571 insertions(+), 887 deletions(-) delete mode 100644 src/internal/common/slices.go delete mode 100644 src/internal/common/slices_test.go create mode 100644 src/internal/common/str/str.go delete mode 100644 src/internal/common/strings.go create mode 100644 src/internal/common/tform/tform.go rename src/pkg/services/m365/api/{exchange_common.go => attachments.go} (50%) rename src/pkg/services/m365/api/{api.go => client.go} (65%) rename src/pkg/services/m365/api/{api_test.go => client_test.go} (86%) create mode 100644 src/pkg/services/m365/api/consts.go create mode 100644 src/pkg/services/m365/api/delta.go create mode 100644 src/pkg/services/m365/api/drive_pager.go rename src/pkg/services/m365/api/{shared.go => item_pager.go} (100%) rename src/pkg/services/m365/api/{shared_test.go => item_pager_test.go} (100%) delete mode 100644 src/pkg/services/m365/api/options.go create mode 100644 src/pkg/services/m365/api/query_params.go diff --git a/src/cli/config/account.go b/src/cli/config/account.go index 310ac97c3..45fd50058 100644 --- a/src/cli/config/account.go +++ b/src/cli/config/account.go @@ -6,7 +6,7 @@ import ( "github.com/alcionai/clues" "github.com/spf13/viper" - "github.com/alcionai/corso/src/internal/common" + "github.com/alcionai/corso/src/internal/common/str" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/credentials" ) @@ -64,7 +64,7 @@ func configureAccount( m365Cfg = account.M365Config{ M365: m365, - AzureTenantID: common.First( + AzureTenantID: str.First( overrides[account.AzureTenantID], m365Cfg.AzureTenantID, os.Getenv(account.AzureTenantID)), diff --git a/src/cli/config/storage.go b/src/cli/config/storage.go index 9aba1e5d9..af8dff397 100644 --- a/src/cli/config/storage.go +++ b/src/cli/config/storage.go @@ -10,6 +10,7 @@ import ( "github.com/spf13/viper" "github.com/alcionai/corso/src/internal/common" + "github.com/alcionai/corso/src/internal/common/str" "github.com/alcionai/corso/src/pkg/credentials" "github.com/alcionai/corso/src/pkg/storage" ) @@ -80,14 +81,14 @@ func configureStorage( } s3Cfg = storage.S3Config{ - Bucket: common.First(overrides[storage.Bucket], s3Cfg.Bucket, os.Getenv(storage.BucketKey)), - Endpoint: common.First(overrides[storage.Endpoint], s3Cfg.Endpoint, os.Getenv(storage.EndpointKey)), - Prefix: common.First(overrides[storage.Prefix], s3Cfg.Prefix, os.Getenv(storage.PrefixKey)), - DoNotUseTLS: common.ParseBool(common.First( + Bucket: str.First(overrides[storage.Bucket], s3Cfg.Bucket, os.Getenv(storage.BucketKey)), + Endpoint: str.First(overrides[storage.Endpoint], s3Cfg.Endpoint, os.Getenv(storage.EndpointKey)), + Prefix: str.First(overrides[storage.Prefix], s3Cfg.Prefix, os.Getenv(storage.PrefixKey)), + DoNotUseTLS: str.ParseBool(str.First( overrides[storage.DoNotUseTLS], strconv.FormatBool(s3Cfg.DoNotUseTLS), os.Getenv(storage.PrefixKey))), - DoNotVerifyTLS: common.ParseBool(common.First( + DoNotVerifyTLS: str.ParseBool(str.First( overrides[storage.DoNotVerifyTLS], strconv.FormatBool(s3Cfg.DoNotVerifyTLS), os.Getenv(storage.PrefixKey))), diff --git a/src/cmd/factory/impl/common.go b/src/cmd/factory/impl/common.go index c267a828a..de5e61915 100644 --- a/src/cmd/factory/impl/common.go +++ b/src/cmd/factory/impl/common.go @@ -11,10 +11,10 @@ import ( "github.com/google/uuid" "github.com/alcionai/corso/src/cli/print" - "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/dttm" "github.com/alcionai/corso/src/internal/common/idname" "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/alcionai/corso/src/internal/common/str" "github.com/alcionai/corso/src/internal/connector" exchMock "github.com/alcionai/corso/src/internal/connector/exchange/mock" "github.com/alcionai/corso/src/internal/data" @@ -116,7 +116,7 @@ func getGCAndVerifyResourceOwner( idname.Provider, error, ) { - tid := common.First(Tenant, os.Getenv(account.AzureTenantID)) + tid := str.First(Tenant, os.Getenv(account.AzureTenantID)) if len(Tenant) == 0 { Tenant = tid diff --git a/src/cmd/getM365/exchange/get_item.go b/src/cmd/getM365/exchange/get_item.go index 1d644f97e..cc6e8cd6a 100644 --- a/src/cmd/getM365/exchange/get_item.go +++ b/src/cmd/getM365/exchange/get_item.go @@ -15,7 +15,8 @@ import ( "github.com/spf13/cobra" "github.com/alcionai/corso/src/cli/utils" - "github.com/alcionai/corso/src/internal/common" + "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/alcionai/corso/src/internal/common/str" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/credentials" @@ -54,7 +55,7 @@ func handleExchangeCmd(cmd *cobra.Command, args []string) error { return nil } - tid := common.First(tenant, os.Getenv(account.AzureTenantID)) + tid := str.First(tenant, os.Getenv(account.AzureTenantID)) ctx := clues.Add( cmd.Context(), @@ -111,9 +112,7 @@ func runDisplayM365JSON( return err } - str := string(bs) - - err = sw.WriteStringValue("", &str) + err = sw.WriteStringValue("", ptr.To(string(bs))) if err != nil { return clues.Wrap(err, "Error writing string value: "+itemID) } diff --git a/src/cmd/getM365/onedrive/get_item.go b/src/cmd/getM365/onedrive/get_item.go index ab1378ab9..414f50694 100644 --- a/src/cmd/getM365/onedrive/get_item.go +++ b/src/cmd/getM365/onedrive/get_item.go @@ -19,8 +19,8 @@ import ( . "github.com/alcionai/corso/src/cli/print" "github.com/alcionai/corso/src/cli/utils" - "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/alcionai/corso/src/internal/common/str" "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/credentials" @@ -57,7 +57,7 @@ func handleOneDriveCmd(cmd *cobra.Command, args []string) error { return nil } - tid := common.First(tenant, os.Getenv(account.AzureTenantID)) + tid := str.First(tenant, os.Getenv(account.AzureTenantID)) ctx := clues.Add( cmd.Context(), diff --git a/src/cmd/purge/purge.go b/src/cmd/purge/purge.go index d9f1133c1..337ea6f46 100644 --- a/src/cmd/purge/purge.go +++ b/src/cmd/purge/purge.go @@ -11,8 +11,8 @@ import ( . "github.com/alcionai/corso/src/cli/print" "github.com/alcionai/corso/src/cli/utils" - "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/common/dttm" + "github.com/alcionai/corso/src/internal/common/str" "github.com/alcionai/corso/src/internal/connector" "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/internal/connector/onedrive" @@ -263,7 +263,7 @@ func getGC(ctx context.Context) (account.Account, *connector.GraphConnector, err // get account info m365Cfg := account.M365Config{ M365: credentials.GetM365(), - AzureTenantID: common.First(tenant, os.Getenv(account.AzureTenantID)), + AzureTenantID: str.First(tenant, os.Getenv(account.AzureTenantID)), } acct, err := account.NewAccount(account.ProviderM365, m365Cfg) diff --git a/src/internal/common/slices.go b/src/internal/common/slices.go deleted file mode 100644 index 73c7c951e..000000000 --- a/src/internal/common/slices.go +++ /dev/null @@ -1,23 +0,0 @@ -package common - -// TODO: can be replaced with slices.Contains() -func ContainsString(super []string, sub string) bool { - for _, s := range super { - if s == sub { - return true - } - } - - return false -} - -// First returns the first non-zero valued string -func First(vs ...string) string { - for _, v := range vs { - if len(v) > 0 { - return v - } - } - - return "" -} diff --git a/src/internal/common/slices_test.go b/src/internal/common/slices_test.go deleted file mode 100644 index 9aae236a5..000000000 --- a/src/internal/common/slices_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package common_test - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/suite" - - "github.com/alcionai/corso/src/internal/common" - "github.com/alcionai/corso/src/internal/tester" -) - -type CommonSlicesSuite struct { - tester.Suite -} - -func TestCommonSlicesSuite(t *testing.T) { - s := &CommonSlicesSuite{Suite: tester.NewUnitSuite(t)} - suite.Run(t, s) -} - -func (suite *CommonSlicesSuite) TestContainsString() { - t := suite.T() - target := "fnords" - good := []string{"fnords"} - bad := []string{"foo", "bar"} - - assert.True(t, common.ContainsString(good, target)) - assert.False(t, common.ContainsString(bad, target)) -} diff --git a/src/internal/common/str/str.go b/src/internal/common/str/str.go new file mode 100644 index 000000000..9dcd46af8 --- /dev/null +++ b/src/internal/common/str/str.go @@ -0,0 +1,58 @@ +package str + +import ( + "fmt" + "strconv" + + "github.com/alcionai/clues" + + "github.com/alcionai/corso/src/internal/common/ptr" +) + +// parseBool returns the bool value represented by the string +// or false on error +func ParseBool(v string) bool { + s, err := strconv.ParseBool(v) + if err != nil { + return false + } + + return s +} + +func FromMapToAny(k string, m map[string]any) (string, error) { + if len(m) == 0 { + return "", clues.New("missing entry").With("map_key", k) + } + + return FromAny(m[k]) +} + +func FromAny(a any) (string, error) { + if a == nil { + return "", clues.New("missing value") + } + + sp, ok := a.(*string) + if ok { + return ptr.Val(sp), nil + } + + s, ok := a.(string) + if ok { + return s, nil + } + + return "", clues.New(fmt.Sprintf("unexpected type: %T", a)) +} + +// First returns the first non-zero valued string +func First(vs ...string) string { + for _, v := range vs { + if len(v) > 0 { + return v + } + } + + return "" +} diff --git a/src/internal/common/strings.go b/src/internal/common/strings.go deleted file mode 100644 index e8db07c94..000000000 --- a/src/internal/common/strings.go +++ /dev/null @@ -1,14 +0,0 @@ -package common - -import "strconv" - -// parseBool returns the bool value represented by the string -// or false on error -func ParseBool(v string) bool { - s, err := strconv.ParseBool(v) - if err != nil { - return false - } - - return s -} diff --git a/src/internal/common/tform/tform.go b/src/internal/common/tform/tform.go new file mode 100644 index 000000000..64b43c316 --- /dev/null +++ b/src/internal/common/tform/tform.go @@ -0,0 +1,25 @@ +package tform + +import ( + "fmt" + + "github.com/alcionai/clues" +) + +func FromMapToAny[T any](k string, m map[string]any) (T, error) { + v, ok := m[k] + if !ok { + return *new(T), clues.New("entry not found") + } + + if v == nil { + return *new(T), clues.New("nil entry") + } + + vt, ok := v.(T) + if !ok { + return *new(T), clues.New(fmt.Sprintf("unexpected type: %T", v)) + } + + return vt, nil +} diff --git a/src/internal/connector/graph/cache_container.go b/src/internal/connector/graph/cache_container.go index fd9c06aac..1e3467639 100644 --- a/src/internal/connector/graph/cache_container.go +++ b/src/internal/connector/graph/cache_container.go @@ -169,21 +169,22 @@ func CreateCalendarDisplayable(entry any, parentID string) *CalendarDisplayable // helper funcs // ========================================= -// checkRequiredValues is a helper function to ensure that -// all the pointers are set prior to being called. -func CheckRequiredValues(c Container) error { - id, ok := ptr.ValOK(c.GetId()) - if !ok { +// CheckIDAndName is a validator that ensures the ID +// and name are populated and not zero valued. +func CheckIDAndName(c Container) error { + if c == nil { + return clues.New("nil container") + } + + id := ptr.Val(c.GetId()) + if len(id) == 0 { return clues.New("container missing ID") } - if _, ok := ptr.ValOK(c.GetDisplayName()); !ok { + dn := ptr.Val(c.GetDisplayName()) + if len(dn) == 0 { return clues.New("container missing display name").With("container_id", id) } - if _, ok := ptr.ValOK(c.GetParentFolderId()); !ok { - return clues.New("container missing parent ID").With("container_id", id) - } - return nil } diff --git a/src/pkg/logger/logger.go b/src/pkg/logger/logger.go index 39636a99c..f6af8ffce 100644 --- a/src/pkg/logger/logger.go +++ b/src/pkg/logger/logger.go @@ -14,7 +14,7 @@ import ( "go.uber.org/zap/zapcore" "golang.org/x/exp/slices" - "github.com/alcionai/corso/src/internal/common" + "github.com/alcionai/corso/src/internal/common/str" ) // Default location for writing logs, initialized in platform specific files @@ -256,7 +256,7 @@ func (s Settings) EnsureDefaults() Settings { algs := []piiAlg{PIIPlainText, PIIMask, PIIHash} if len(set.PIIHandling) == 0 || !slices.Contains(algs, set.PIIHandling) { - set.PIIHandling = piiAlg(common.First(piiHandling, string(PIIPlainText))) + set.PIIHandling = piiAlg(str.First(piiHandling, string(PIIPlainText))) } if len(set.File) == 0 { diff --git a/src/pkg/services/m365/api/exchange_common.go b/src/pkg/services/m365/api/attachments.go similarity index 50% rename from src/pkg/services/m365/api/exchange_common.go rename to src/pkg/services/m365/api/attachments.go index 7f4f6afe2..e5125a64a 100644 --- a/src/pkg/services/m365/api/exchange_common.go +++ b/src/pkg/services/m365/api/attachments.go @@ -3,29 +3,11 @@ package api import ( "strings" - "github.com/alcionai/clues" "github.com/microsoftgraph/msgraph-sdk-go/models" "github.com/alcionai/corso/src/internal/common/ptr" - "github.com/alcionai/corso/src/internal/connector/graph" ) -// checkIDAndName is a helper function to ensure that -// the ID and name pointers are set prior to being called. -func checkIDAndName(c graph.Container) error { - id := ptr.Val(c.GetId()) - if len(id) == 0 { - return clues.New("container missing ID") - } - - dn := ptr.Val(c.GetDisplayName()) - if len(dn) == 0 { - return clues.New("container missing display name").With("container_id", id) - } - - return nil -} - func HasAttachments(body models.ItemBodyable) bool { if body == nil { return false diff --git a/src/pkg/services/m365/api/api.go b/src/pkg/services/m365/api/client.go similarity index 65% rename from src/pkg/services/m365/api/api.go rename to src/pkg/services/m365/api/client.go index 1500840fe..cf7930664 100644 --- a/src/pkg/services/m365/api/api.go +++ b/src/pkg/services/m365/api/client.go @@ -1,10 +1,7 @@ package api import ( - "context" - "github.com/alcionai/clues" - "github.com/microsoft/kiota-abstractions-go/serialization" "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/pkg/account" @@ -78,31 +75,3 @@ func newLargeItemService(creds account.M365Config) (*graph.Service, error) { return a, nil } - -// --------------------------------------------------------------------------- -// common types and consts -// --------------------------------------------------------------------------- - -// DeltaUpdate holds the results of a current delta token. It normally -// gets produced when aggregating the addition and removal of items in -// a delta-queryable folder. -type DeltaUpdate struct { - // the deltaLink itself - URL string - // true if the old delta was marked as invalid - Reset bool -} - -// GraphQuery represents functions which perform exchange-specific queries -// into M365 backstore. Responses -> returned items will only contain the information -// that is included in the options -// TODO: use selector or path for granularity into specific folders or specific date ranges -type GraphQuery func(ctx context.Context, userID string) (serialization.Parsable, error) - -// GraphRetrievalFunctions are functions from the Microsoft Graph API that retrieve -// the default associated data of a M365 object. This varies by object. Additional -// Queries must be run to obtain the omitted fields. -type GraphRetrievalFunc func( - ctx context.Context, - user, m365ID string, -) (serialization.Parsable, error) diff --git a/src/pkg/services/m365/api/api_test.go b/src/pkg/services/m365/api/client_test.go similarity index 86% rename from src/pkg/services/m365/api/api_test.go rename to src/pkg/services/m365/api/client_test.go index cfaf8976f..196cc2322 100644 --- a/src/pkg/services/m365/api/api_test.go +++ b/src/pkg/services/m365/api/client_test.go @@ -49,41 +49,6 @@ func (suite *ExchangeServiceSuite) SetupSuite() { suite.gs = graph.NewService(adpt) } -func (suite *ExchangeServiceSuite) TestOptionsForCalendars() { - tests := []struct { - name string - params []string - checkError assert.ErrorAssertionFunc - }{ - { - name: "Empty Literal", - params: []string{}, - checkError: assert.NoError, - }, - { - name: "Invalid Parameter", - params: []string{"status"}, - checkError: assert.Error, - }, - { - name: "Invalid Parameters", - params: []string{"status", "height", "month"}, - checkError: assert.Error, - }, - { - name: "Valid Parameters", - params: []string{"changeKey", "events", "owner"}, - checkError: assert.NoError, - }, - } - for _, test := range tests { - suite.Run(test.name, func() { - _, err := optionsForCalendars(test.params) - test.checkError(suite.T(), err, clues.ToCore(err)) - }) - } -} - //nolint:lll var stubHTMLContent = "\r\n
    Happy New Year,

    In accordance with TPS report guidelines, there have been questions about how to address our activities SharePoint Cover page. Do you believe this is the best picture? 



    Let me know if this meets our culture requirements.

    Warm Regards,

    Dustin
    " diff --git a/src/pkg/services/m365/api/consts.go b/src/pkg/services/m365/api/consts.go new file mode 100644 index 000000000..0828d3b4d --- /dev/null +++ b/src/pkg/services/m365/api/consts.go @@ -0,0 +1,3 @@ +package api + +const maxPageSize = int32(999) diff --git a/src/pkg/services/m365/api/contacts.go b/src/pkg/services/m365/api/contacts.go index 2f5395b37..b958e2ea1 100644 --- a/src/pkg/services/m365/api/contacts.go +++ b/src/pkg/services/m365/api/contacts.go @@ -96,12 +96,13 @@ func (c Contacts) GetContainerByID( ctx context.Context, userID, dirID string, ) (graph.Container, error) { - ofcf, err := optionsForContactFolderByID([]string{"displayName", "parentFolderId"}) - if err != nil { - return nil, graph.Wrap(ctx, err, "setting contact folder options") + queryParams := &users.ItemContactFoldersContactFolderItemRequestBuilderGetRequestConfiguration{ + QueryParameters: &users.ItemContactFoldersContactFolderItemRequestBuilderGetQueryParameters{ + Select: []string{"id", "displayName", "parentFolderId"}, + }, } - resp, err := c.Stable.Client().Users().ByUserId(userID).ContactFolders().ByContactFolderId(dirID).Get(ctx, ofcf) + resp, err := c.Stable.Client().Users().ByUserId(userID).ContactFolders().ByContactFolderId(dirID).Get(ctx, queryParams) if err != nil { return nil, graph.Stack(ctx, err) } @@ -125,11 +126,10 @@ func (c Contacts) EnumerateContainers( return graph.Stack(ctx, err) } - fields := []string{"displayName", "parentFolderId"} - - ofcf, err := optionsForContactChildFolders(fields) - if err != nil { - return graph.Wrap(ctx, err, "setting contact child folder options") + queryParams := &users.ItemContactFoldersItemChildFoldersRequestBuilderGetRequestConfiguration{ + QueryParameters: &users.ItemContactFoldersItemChildFoldersRequestBuilderGetQueryParameters{ + Select: []string{"id", "displayName", "parentFolderId"}, + }, } el := errs.Local() @@ -145,7 +145,7 @@ func (c Contacts) EnumerateContainers( break } - resp, err := builder.Get(ctx, ofcf) + resp, err := builder.Get(ctx, queryParams) if err != nil { return graph.Stack(ctx, err) } @@ -155,7 +155,7 @@ func (c Contacts) EnumerateContainers( return el.Failure() } - if err := checkIDAndName(fold); err != nil { + if err := graph.CheckIDAndName(fold); err != nil { errs.AddRecoverable(graph.Stack(ctx, err).Label(fault.LabelForceNoBackupCreation)) continue } @@ -200,28 +200,17 @@ func NewContactPager( gs graph.Servicer, user, directoryID string, immutableIDs bool, -) (itemPager, error) { - selecting, err := buildOptions([]string{"parentFolderId"}, fieldsForContacts) - if err != nil { - return nil, err - } - - requestParameters := &users.ItemContactFoldersItemContactsRequestBuilderGetQueryParameters{ - Select: selecting, - } - - options := &users.ItemContactFoldersItemContactsRequestBuilderGetRequestConfiguration{ - QueryParameters: requestParameters, - Headers: buildPreferHeaders(true, immutableIDs), - } - - if err != nil { - return &contactPager{}, err +) itemPager { + queryParams := &users.ItemContactFoldersItemContactsRequestBuilderGetRequestConfiguration{ + QueryParameters: &users.ItemContactFoldersItemContactsRequestBuilderGetQueryParameters{ + Select: []string{"id", "parentFolderId"}, + }, + Headers: buildPreferHeaders(true, immutableIDs), } builder := gs.Client().Users().ByUserId(user).ContactFolders().ByContactFolderId(directoryID).Contacts() - return &contactPager{gs, builder, options}, nil + return &contactPager{gs, builder, queryParams} } func (p *contactPager) getPage(ctx context.Context) (api.DeltaPageLinker, error) { @@ -274,23 +263,12 @@ func NewContactDeltaPager( gs graph.Servicer, user, directoryID, deltaURL string, immutableIDs bool, -) (itemPager, error) { - selecting, err := buildOptions([]string{"parentFolderId"}, fieldsForContacts) - if err != nil { - return nil, err - } - - requestParameters := &users.ItemContactFoldersItemContactsDeltaRequestBuilderGetQueryParameters{ - Select: selecting, - } - +) itemPager { options := &users.ItemContactFoldersItemContactsDeltaRequestBuilderGetRequestConfiguration{ - QueryParameters: requestParameters, - Headers: buildPreferHeaders(true, immutableIDs), - } - - if err != nil { - return &contactDeltaPager{}, err + QueryParameters: &users.ItemContactFoldersItemContactsDeltaRequestBuilderGetQueryParameters{ + Select: []string{"id", "parentFolderId"}, + }, + Headers: buildPreferHeaders(true, immutableIDs), } var builder *users.ItemContactFoldersItemContactsDeltaRequestBuilder @@ -300,7 +278,7 @@ func NewContactDeltaPager( builder = getContactDeltaBuilder(ctx, gs, user, directoryID, options) } - return &contactDeltaPager{gs, user, directoryID, builder, options}, nil + return &contactDeltaPager{gs, user, directoryID, builder, options} } func (p *contactDeltaPager) getPage(ctx context.Context) (api.DeltaPageLinker, error) { @@ -340,15 +318,8 @@ func (c Contacts) GetAddedAndRemovedItemIDs( "category", selectors.ExchangeContact, "container_id", directoryID) - pager, err := NewContactPager(ctx, service, user, directoryID, immutableIDs) - if err != nil { - return nil, nil, DeltaUpdate{}, graph.Wrap(ctx, err, "creating non-delta pager") - } - - deltaPager, err := NewContactDeltaPager(ctx, service, user, directoryID, oldDelta, immutableIDs) - if err != nil { - return nil, nil, DeltaUpdate{}, graph.Wrap(ctx, err, "creating delta pager") - } + pager := NewContactPager(ctx, service, user, directoryID, immutableIDs) + deltaPager := NewContactDeltaPager(ctx, service, user, directoryID, oldDelta, immutableIDs) return getAddedAndRemovedItemIDs(ctx, service, pager, deltaPager, oldDelta, canMakeDeltaQueries) } diff --git a/src/pkg/services/m365/api/delta.go b/src/pkg/services/m365/api/delta.go new file mode 100644 index 000000000..dc24961f0 --- /dev/null +++ b/src/pkg/services/m365/api/delta.go @@ -0,0 +1,11 @@ +package api + +// DeltaUpdate holds the results of a current delta token. It normally +// gets produced when aggregating the addition and removal of items in +// a delta-queryable folder. +type DeltaUpdate struct { + // the deltaLink itself + URL string + // true if the old delta was marked as invalid + Reset bool +} diff --git a/src/pkg/services/m365/api/drive.go b/src/pkg/services/m365/api/drive.go index 33c357033..8201f51e3 100644 --- a/src/pkg/services/m365/api/drive.go +++ b/src/pkg/services/m365/api/drive.go @@ -3,312 +3,14 @@ package api import ( "context" "fmt" - "strings" - "time" "github.com/alcionai/clues" - abstractions "github.com/microsoft/kiota-abstractions-go" "github.com/microsoftgraph/msgraph-sdk-go/drives" "github.com/microsoftgraph/msgraph-sdk-go/models" - "github.com/microsoftgraph/msgraph-sdk-go/sites" - "github.com/microsoftgraph/msgraph-sdk-go/users" - "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector/graph" - "github.com/alcionai/corso/src/internal/connector/graph/api" - onedrive "github.com/alcionai/corso/src/internal/connector/onedrive/consts" - "github.com/alcionai/corso/src/pkg/logger" ) -func getValues[T any](l api.PageLinker) ([]T, error) { - page, ok := l.(interface{ GetValue() []T }) - if !ok { - return nil, clues.New("page does not comply with GetValue() interface").With("page_item_type", fmt.Sprintf("%T", l)) - } - - return page.GetValue(), nil -} - -// max we can do is 999 -const pageSize = int32(999) - -type driveItemPager struct { - gs graph.Servicer - driveID string - builder *drives.ItemItemsItemDeltaRequestBuilder - options *drives.ItemItemsItemDeltaRequestBuilderGetRequestConfiguration -} - -func NewItemPager( - gs graph.Servicer, - driveID, link string, - fields []string, -) *driveItemPager { - pageCount := pageSize - - headers := abstractions.NewRequestHeaders() - preferHeaderItems := []string{ - "deltashowremovedasdeleted", - "deltatraversepermissiongaps", - "deltashowsharingchanges", - "hierarchicalsharing", - } - headers.Add("Prefer", strings.Join(preferHeaderItems, ",")) - - requestConfig := &drives.ItemItemsItemDeltaRequestBuilderGetRequestConfiguration{ - Headers: headers, - QueryParameters: &drives.ItemItemsItemDeltaRequestBuilderGetQueryParameters{ - Top: &pageCount, - Select: fields, - }, - } - - res := &driveItemPager{ - gs: gs, - driveID: driveID, - options: requestConfig, - builder: gs.Client(). - Drives(). - ByDriveId(driveID). - Items().ByDriveItemId(onedrive.RootID).Delta(), - } - - if len(link) > 0 { - res.builder = drives.NewItemItemsItemDeltaRequestBuilder(link, gs.Adapter()) - } - - return res -} - -func (p *driveItemPager) GetPage(ctx context.Context) (api.DeltaPageLinker, error) { - var ( - resp api.DeltaPageLinker - err error - ) - - resp, err = p.builder.Get(ctx, p.options) - if err != nil { - return nil, graph.Stack(ctx, err) - } - - return resp, nil -} - -func (p *driveItemPager) SetNext(link string) { - p.builder = drives.NewItemItemsItemDeltaRequestBuilder(link, p.gs.Adapter()) -} - -func (p *driveItemPager) Reset() { - p.builder = p.gs.Client(). - Drives(). - ByDriveId(p.driveID). - Items(). - ByDriveItemId(onedrive.RootID). - Delta() -} - -func (p *driveItemPager) ValuesIn(l api.DeltaPageLinker) ([]models.DriveItemable, error) { - return getValues[models.DriveItemable](l) -} - -type userDrivePager struct { - userID string - gs graph.Servicer - builder *users.ItemDrivesRequestBuilder - options *users.ItemDrivesRequestBuilderGetRequestConfiguration -} - -func NewUserDrivePager( - gs graph.Servicer, - userID string, - fields []string, -) *userDrivePager { - requestConfig := &users.ItemDrivesRequestBuilderGetRequestConfiguration{ - QueryParameters: &users.ItemDrivesRequestBuilderGetQueryParameters{ - Select: fields, - }, - } - - res := &userDrivePager{ - userID: userID, - gs: gs, - options: requestConfig, - builder: gs.Client().Users().ByUserId(userID).Drives(), - } - - return res -} - -type nopUserDrivePageLinker struct { - drive models.Driveable -} - -func (nl nopUserDrivePageLinker) GetOdataNextLink() *string { return nil } - -func (p *userDrivePager) GetPage(ctx context.Context) (api.PageLinker, error) { - var ( - resp api.PageLinker - err error - ) - - d, err := p.gs.Client().Users().ByUserId(p.userID).Drive().Get(ctx, nil) - if err != nil { - return nil, graph.Stack(ctx, err) - } - - resp = &nopUserDrivePageLinker{drive: d} - - // TODO(keepers): turn back on when we can separate drive enumeration - // from default drive lookup. - - // resp, err = p.builder.Get(ctx, p.options) - // if err != nil { - // return nil, graph.Stack(ctx, err) - // } - - return resp, nil -} - -func (p *userDrivePager) SetNext(link string) { - p.builder = users.NewItemDrivesRequestBuilder(link, p.gs.Adapter()) -} - -func (p *userDrivePager) ValuesIn(l api.PageLinker) ([]models.Driveable, error) { - nl, ok := l.(*nopUserDrivePageLinker) - if !ok || nl == nil { - return nil, clues.New(fmt.Sprintf("improper page linker struct for user drives: %T", l)) - } - - // TODO(keepers): turn back on when we can separate drive enumeration - // from default drive lookup. - - // return getValues[models.Driveable](l) - - return []models.Driveable{nl.drive}, nil -} - -type siteDrivePager struct { - gs graph.Servicer - builder *sites.ItemDrivesRequestBuilder - options *sites.ItemDrivesRequestBuilderGetRequestConfiguration -} - -// NewSiteDrivePager is a constructor for creating a siteDrivePager -// fields are the associated site drive fields that are desired to be returned -// in a query. NOTE: Fields are case-sensitive. Incorrect field settings will -// cause errors during later paging. -// Available fields: https://learn.microsoft.com/en-us/graph/api/resources/drive?view=graph-rest-1.0 -func NewSiteDrivePager( - gs graph.Servicer, - siteID string, - fields []string, -) *siteDrivePager { - requestConfig := &sites.ItemDrivesRequestBuilderGetRequestConfiguration{ - QueryParameters: &sites.ItemDrivesRequestBuilderGetQueryParameters{ - Select: fields, - }, - } - - res := &siteDrivePager{ - gs: gs, - options: requestConfig, - builder: gs.Client().Sites().BySiteId(siteID).Drives(), - } - - return res -} - -func (p *siteDrivePager) GetPage(ctx context.Context) (api.PageLinker, error) { - var ( - resp api.PageLinker - err error - ) - - resp, err = p.builder.Get(ctx, p.options) - if err != nil { - return nil, graph.Stack(ctx, err) - } - - return resp, nil -} - -func (p *siteDrivePager) SetNext(link string) { - p.builder = sites.NewItemDrivesRequestBuilder(link, p.gs.Adapter()) -} - -func (p *siteDrivePager) ValuesIn(l api.PageLinker) ([]models.Driveable, error) { - return getValues[models.Driveable](l) -} - -// DrivePager pages through different types of drive owners -type DrivePager interface { - GetPage(context.Context) (api.PageLinker, error) - SetNext(nextLink string) - ValuesIn(api.PageLinker) ([]models.Driveable, error) -} - -// GetAllDrives fetches all drives for the given pager -func GetAllDrives( - ctx context.Context, - pager DrivePager, - retry bool, - maxRetryCount int, -) ([]models.Driveable, error) { - ds := []models.Driveable{} - - if !retry { - maxRetryCount = 0 - } - - // Loop through all pages returned by Graph API. - for { - var ( - err error - page api.PageLinker - ) - - // Retry Loop for Drive retrieval. Request can timeout - for i := 0; i <= maxRetryCount; i++ { - page, err = pager.GetPage(ctx) - if err != nil { - if clues.HasLabel(err, graph.LabelsMysiteNotFound) { - logger.Ctx(ctx).Infof("resource owner does not have a drive") - return make([]models.Driveable, 0), nil // no license or drives. - } - - if graph.IsErrTimeout(err) && i < maxRetryCount { - time.Sleep(time.Duration(3*(i+1)) * time.Second) - continue - } - - return nil, graph.Wrap(ctx, err, "retrieving drives") - } - - // No error encountered, break the retry loop so we can extract results - // and see if there's another page to fetch. - break - } - - tmp, err := pager.ValuesIn(page) - if err != nil { - return nil, graph.Wrap(ctx, err, "extracting drives from response") - } - - ds = append(ds, tmp...) - - nextLink := ptr.Val(page.GetOdataNextLink()) - if len(nextLink) == 0 { - break - } - - pager.SetNext(nextLink) - } - - logger.Ctx(ctx).Debugf("retrieved %d valid drives", len(ds)) - - return ds, nil -} - // generic drive item getter func GetDriveItem( ctx context.Context, diff --git a/src/pkg/services/m365/api/drive_pager.go b/src/pkg/services/m365/api/drive_pager.go new file mode 100644 index 000000000..684277fd6 --- /dev/null +++ b/src/pkg/services/m365/api/drive_pager.go @@ -0,0 +1,325 @@ +package api + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/alcionai/clues" + abstractions "github.com/microsoft/kiota-abstractions-go" + "github.com/microsoftgraph/msgraph-sdk-go/drives" + "github.com/microsoftgraph/msgraph-sdk-go/models" + "github.com/microsoftgraph/msgraph-sdk-go/sites" + "github.com/microsoftgraph/msgraph-sdk-go/users" + + "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/alcionai/corso/src/internal/connector/graph" + "github.com/alcionai/corso/src/internal/connector/graph/api" + onedrive "github.com/alcionai/corso/src/internal/connector/onedrive/consts" + "github.com/alcionai/corso/src/pkg/logger" +) + +// --------------------------------------------------------------------------- +// item pager +// --------------------------------------------------------------------------- + +type driveItemPager struct { + gs graph.Servicer + driveID string + builder *drives.ItemItemsItemDeltaRequestBuilder + options *drives.ItemItemsItemDeltaRequestBuilderGetRequestConfiguration +} + +func NewItemPager( + gs graph.Servicer, + driveID, link string, + fields []string, +) *driveItemPager { + headers := abstractions.NewRequestHeaders() + preferHeaderItems := []string{ + "deltashowremovedasdeleted", + "deltatraversepermissiongaps", + "deltashowsharingchanges", + "hierarchicalsharing", + } + headers.Add("Prefer", strings.Join(preferHeaderItems, ",")) + + requestConfig := &drives.ItemItemsItemDeltaRequestBuilderGetRequestConfiguration{ + Headers: headers, + QueryParameters: &drives.ItemItemsItemDeltaRequestBuilderGetQueryParameters{ + Top: ptr.To(maxPageSize), + Select: fields, + }, + } + + res := &driveItemPager{ + gs: gs, + driveID: driveID, + options: requestConfig, + builder: gs.Client(). + Drives(). + ByDriveId(driveID). + Items().ByDriveItemId(onedrive.RootID).Delta(), + } + + if len(link) > 0 { + res.builder = drives.NewItemItemsItemDeltaRequestBuilder(link, gs.Adapter()) + } + + return res +} + +func (p *driveItemPager) GetPage(ctx context.Context) (api.DeltaPageLinker, error) { + var ( + resp api.DeltaPageLinker + err error + ) + + resp, err = p.builder.Get(ctx, p.options) + if err != nil { + return nil, graph.Stack(ctx, err) + } + + return resp, nil +} + +func (p *driveItemPager) SetNext(link string) { + p.builder = drives.NewItemItemsItemDeltaRequestBuilder(link, p.gs.Adapter()) +} + +func (p *driveItemPager) Reset() { + p.builder = p.gs.Client(). + Drives(). + ByDriveId(p.driveID). + Items(). + ByDriveItemId(onedrive.RootID). + Delta() +} + +func (p *driveItemPager) ValuesIn(l api.DeltaPageLinker) ([]models.DriveItemable, error) { + return getValues[models.DriveItemable](l) +} + +// --------------------------------------------------------------------------- +// user pager +// --------------------------------------------------------------------------- + +type userDrivePager struct { + userID string + gs graph.Servicer + builder *users.ItemDrivesRequestBuilder + options *users.ItemDrivesRequestBuilderGetRequestConfiguration +} + +func NewUserDrivePager( + gs graph.Servicer, + userID string, + fields []string, +) *userDrivePager { + requestConfig := &users.ItemDrivesRequestBuilderGetRequestConfiguration{ + QueryParameters: &users.ItemDrivesRequestBuilderGetQueryParameters{ + Select: fields, + }, + } + + res := &userDrivePager{ + userID: userID, + gs: gs, + options: requestConfig, + builder: gs.Client().Users().ByUserId(userID).Drives(), + } + + return res +} + +type nopUserDrivePageLinker struct { + drive models.Driveable +} + +func (nl nopUserDrivePageLinker) GetOdataNextLink() *string { return nil } + +func (p *userDrivePager) GetPage(ctx context.Context) (api.PageLinker, error) { + var ( + resp api.PageLinker + err error + ) + + d, err := p.gs.Client().Users().ByUserId(p.userID).Drive().Get(ctx, nil) + if err != nil { + return nil, graph.Stack(ctx, err) + } + + resp = &nopUserDrivePageLinker{drive: d} + + // TODO(keepers): turn back on when we can separate drive enumeration + // from default drive lookup. + + // resp, err = p.builder.Get(ctx, p.options) + // if err != nil { + // return nil, graph.Stack(ctx, err) + // } + + return resp, nil +} + +func (p *userDrivePager) SetNext(link string) { + p.builder = users.NewItemDrivesRequestBuilder(link, p.gs.Adapter()) +} + +func (p *userDrivePager) ValuesIn(l api.PageLinker) ([]models.Driveable, error) { + nl, ok := l.(*nopUserDrivePageLinker) + if !ok || nl == nil { + return nil, clues.New(fmt.Sprintf("improper page linker struct for user drives: %T", l)) + } + + // TODO(keepers): turn back on when we can separate drive enumeration + // from default drive lookup. + + // return getValues[models.Driveable](l) + + return []models.Driveable{nl.drive}, nil +} + +// --------------------------------------------------------------------------- +// site pager +// --------------------------------------------------------------------------- + +type siteDrivePager struct { + gs graph.Servicer + builder *sites.ItemDrivesRequestBuilder + options *sites.ItemDrivesRequestBuilderGetRequestConfiguration +} + +// NewSiteDrivePager is a constructor for creating a siteDrivePager +// fields are the associated site drive fields that are desired to be returned +// in a query. NOTE: Fields are case-sensitive. Incorrect field settings will +// cause errors during later paging. +// Available fields: https://learn.microsoft.com/en-us/graph/api/resources/drive?view=graph-rest-1.0 +func NewSiteDrivePager( + gs graph.Servicer, + siteID string, + fields []string, +) *siteDrivePager { + requestConfig := &sites.ItemDrivesRequestBuilderGetRequestConfiguration{ + QueryParameters: &sites.ItemDrivesRequestBuilderGetQueryParameters{ + Select: fields, + }, + } + + res := &siteDrivePager{ + gs: gs, + options: requestConfig, + builder: gs.Client().Sites().BySiteId(siteID).Drives(), + } + + return res +} + +func (p *siteDrivePager) GetPage(ctx context.Context) (api.PageLinker, error) { + var ( + resp api.PageLinker + err error + ) + + resp, err = p.builder.Get(ctx, p.options) + if err != nil { + return nil, graph.Stack(ctx, err) + } + + return resp, nil +} + +func (p *siteDrivePager) SetNext(link string) { + p.builder = sites.NewItemDrivesRequestBuilder(link, p.gs.Adapter()) +} + +func (p *siteDrivePager) ValuesIn(l api.PageLinker) ([]models.Driveable, error) { + return getValues[models.Driveable](l) +} + +// --------------------------------------------------------------------------- +// drive pager +// --------------------------------------------------------------------------- + +// DrivePager pages through different types of drive owners +type DrivePager interface { + GetPage(context.Context) (api.PageLinker, error) + SetNext(nextLink string) + ValuesIn(api.PageLinker) ([]models.Driveable, error) +} + +// GetAllDrives fetches all drives for the given pager +func GetAllDrives( + ctx context.Context, + pager DrivePager, + retry bool, + maxRetryCount int, +) ([]models.Driveable, error) { + ds := []models.Driveable{} + + if !retry { + maxRetryCount = 0 + } + + // Loop through all pages returned by Graph API. + for { + var ( + err error + page api.PageLinker + ) + + // Retry Loop for Drive retrieval. Request can timeout + for i := 0; i <= maxRetryCount; i++ { + page, err = pager.GetPage(ctx) + if err != nil { + if clues.HasLabel(err, graph.LabelsMysiteNotFound) { + logger.Ctx(ctx).Infof("resource owner does not have a drive") + return make([]models.Driveable, 0), nil // no license or drives. + } + + if graph.IsErrTimeout(err) && i < maxRetryCount { + time.Sleep(time.Duration(3*(i+1)) * time.Second) + continue + } + + return nil, graph.Wrap(ctx, err, "retrieving drives") + } + + // No error encountered, break the retry loop so we can extract results + // and see if there's another page to fetch. + break + } + + tmp, err := pager.ValuesIn(page) + if err != nil { + return nil, graph.Wrap(ctx, err, "extracting drives from response") + } + + ds = append(ds, tmp...) + + nextLink := ptr.Val(page.GetOdataNextLink()) + if len(nextLink) == 0 { + break + } + + pager.SetNext(nextLink) + } + + logger.Ctx(ctx).Debugf("retrieved %d valid drives", len(ds)) + + return ds, nil +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +func getValues[T any](l api.PageLinker) ([]T, error) { + page, ok := l.(interface{ GetValue() []T }) + if !ok { + return nil, clues.New("page does not comply with GetValue() interface").With("page_item_type", fmt.Sprintf("%T", l)) + } + + return page.GetValue(), nil +} diff --git a/src/pkg/services/m365/api/events.go b/src/pkg/services/m365/api/events.go index 3d84a9c53..5cccdc49b 100644 --- a/src/pkg/services/m365/api/events.go +++ b/src/pkg/services/m365/api/events.go @@ -84,12 +84,13 @@ func (c Events) GetContainerByID( return nil, graph.Stack(ctx, err) } - ofc, err := optionsForCalendarsByID([]string{"name", "owner"}) - if err != nil { - return nil, graph.Wrap(ctx, err, "setting event calendar options") + queryParams := &users.ItemCalendarsCalendarItemRequestBuilderGetRequestConfiguration{ + QueryParameters: &users.ItemCalendarsCalendarItemRequestBuilderGetQueryParameters{ + Select: []string{"id", "name", "owner"}, + }, } - cal, err := service.Client().Users().ByUserId(userID).Calendars().ByCalendarId(containerID).Get(ctx, ofc) + cal, err := service.Client().Users().ByUserId(userID).Calendars().ByCalendarId(containerID).Get(ctx, queryParams) if err != nil { return nil, graph.Stack(ctx, err).WithClues(ctx) } @@ -129,7 +130,7 @@ func (c Events) GetContainerByName( cal := resp.GetValue()[0] cd := CalendarDisplayable{Calendarable: cal} - if err := checkIDAndName(cd); err != nil { + if err := graph.CheckIDAndName(cd); err != nil { return nil, err } @@ -199,9 +200,10 @@ func (c Events) EnumerateContainers( return graph.Stack(ctx, err) } - ofc, err := optionsForCalendars([]string{"name"}) - if err != nil { - return graph.Wrap(ctx, err, "setting calendar options") + queryParams := &users.ItemCalendarsRequestBuilderGetRequestConfiguration{ + QueryParameters: &users.ItemCalendarsRequestBuilderGetQueryParameters{ + Select: []string{"id", "name"}, + }, } el := errs.Local() @@ -212,7 +214,7 @@ func (c Events) EnumerateContainers( break } - resp, err := builder.Get(ctx, ofc) + resp, err := builder.Get(ctx, queryParams) if err != nil { return graph.Stack(ctx, err) } @@ -223,7 +225,7 @@ func (c Events) EnumerateContainers( } cd := CalendarDisplayable{Calendarable: cal} - if err := checkIDAndName(cd); err != nil { + if err := graph.CheckIDAndName(cd); err != nil { errs.AddRecoverable(graph.Stack(ctx, err).Label(fault.LabelForceNoBackupCreation)) continue } diff --git a/src/pkg/services/m365/api/shared.go b/src/pkg/services/m365/api/item_pager.go similarity index 100% rename from src/pkg/services/m365/api/shared.go rename to src/pkg/services/m365/api/item_pager.go diff --git a/src/pkg/services/m365/api/shared_test.go b/src/pkg/services/m365/api/item_pager_test.go similarity index 100% rename from src/pkg/services/m365/api/shared_test.go rename to src/pkg/services/m365/api/item_pager_test.go diff --git a/src/pkg/services/m365/api/mail.go b/src/pkg/services/m365/api/mail.go index 2abb889c0..c951027be 100644 --- a/src/pkg/services/m365/api/mail.go +++ b/src/pkg/services/m365/api/mail.go @@ -123,9 +123,10 @@ func (c Mail) GetContainerByID( return nil, graph.Stack(ctx, err) } - ofmf, err := optionsForMailFoldersItem([]string{"displayName", "parentFolderId"}) - if err != nil { - return nil, graph.Wrap(ctx, err, "setting mail folder options") + queryParams := &users.ItemMailFoldersMailFolderItemRequestBuilderGetRequestConfiguration{ + QueryParameters: &users.ItemMailFoldersMailFolderItemRequestBuilderGetQueryParameters{ + Select: []string{"id", "displayName", "parentFolderId"}, + }, } resp, err := service.Client(). @@ -133,7 +134,7 @@ func (c Mail) GetContainerByID( ByUserId(userID). MailFolders(). ByMailFolderId(dirID). - Get(ctx, ofmf) + Get(ctx, queryParams) if err != nil { return nil, graph.Stack(ctx, err) } @@ -380,23 +381,12 @@ func NewMailPager( gs graph.Servicer, user, directoryID string, immutableIDs bool, -) (itemPager, error) { - selecting, err := buildOptions([]string{"isRead"}, fieldsForMessages) - if err != nil { - return nil, err - } - - requestParameters := &users.ItemMailFoldersItemMessagesRequestBuilderGetQueryParameters{ - Select: selecting, - } - - options := &users.ItemMailFoldersItemMessagesRequestBuilderGetRequestConfiguration{ - QueryParameters: requestParameters, - Headers: buildPreferHeaders(true, immutableIDs), - } - - if err != nil { - return &mailPager{}, err +) itemPager { + queryParams := &users.ItemMailFoldersItemMessagesRequestBuilderGetRequestConfiguration{ + QueryParameters: &users.ItemMailFoldersItemMessagesRequestBuilderGetQueryParameters{ + Select: []string{"id", "isRead"}, + }, + Headers: buildPreferHeaders(true, immutableIDs), } builder := gs.Client(). @@ -406,7 +396,7 @@ func NewMailPager( ByMailFolderId(directoryID). Messages() - return &mailPager{gs, builder, options}, nil + return &mailPager{gs, builder, queryParams} } func (p *mailPager) getPage(ctx context.Context) (api.DeltaPageLinker, error) { @@ -466,23 +456,12 @@ func NewMailDeltaPager( gs graph.Servicer, user, directoryID, oldDelta string, immutableIDs bool, -) (itemPager, error) { - selecting, err := buildOptions([]string{"isRead"}, fieldsForMessages) - if err != nil { - return nil, err - } - - requestParameters := &users.ItemMailFoldersItemMessagesDeltaRequestBuilderGetQueryParameters{ - Select: selecting, - } - - options := &users.ItemMailFoldersItemMessagesDeltaRequestBuilderGetRequestConfiguration{ - QueryParameters: requestParameters, - Headers: buildPreferHeaders(true, immutableIDs), - } - - if err != nil { - return &mailDeltaPager{}, err +) itemPager { + queryParams := &users.ItemMailFoldersItemMessagesDeltaRequestBuilderGetRequestConfiguration{ + QueryParameters: &users.ItemMailFoldersItemMessagesDeltaRequestBuilderGetQueryParameters{ + Select: []string{"id", "isRead"}, + }, + Headers: buildPreferHeaders(true, immutableIDs), } var builder *users.ItemMailFoldersItemMessagesDeltaRequestBuilder @@ -490,10 +469,10 @@ func NewMailDeltaPager( if len(oldDelta) > 0 { builder = users.NewItemMailFoldersItemMessagesDeltaRequestBuilder(oldDelta, gs.Adapter()) } else { - builder = getMailDeltaBuilder(ctx, gs, user, directoryID, options) + builder = getMailDeltaBuilder(ctx, gs, user, directoryID, queryParams) } - return &mailDeltaPager{gs, user, directoryID, builder, options}, nil + return &mailDeltaPager{gs, user, directoryID, builder, queryParams} } func (p *mailDeltaPager) getPage(ctx context.Context) (api.DeltaPageLinker, error) { @@ -539,15 +518,8 @@ func (c Mail) GetAddedAndRemovedItemIDs( "category", selectors.ExchangeMail, "container_id", directoryID) - pager, err := NewMailPager(ctx, service, user, directoryID, immutableIDs) - if err != nil { - return nil, nil, DeltaUpdate{}, graph.Wrap(ctx, err, "creating delta pager") - } - - deltaPager, err := NewMailDeltaPager(ctx, service, user, directoryID, oldDelta, immutableIDs) - if err != nil { - return nil, nil, DeltaUpdate{}, graph.Wrap(ctx, err, "creating delta pager") - } + pager := NewMailPager(ctx, service, user, directoryID, immutableIDs) + deltaPager := NewMailDeltaPager(ctx, service, user, directoryID, oldDelta, immutableIDs) return getAddedAndRemovedItemIDs(ctx, service, pager, deltaPager, oldDelta, canMakeDeltaQueries) } diff --git a/src/pkg/services/m365/api/options.go b/src/pkg/services/m365/api/options.go deleted file mode 100644 index ff506e7d5..000000000 --- a/src/pkg/services/m365/api/options.go +++ /dev/null @@ -1,214 +0,0 @@ -package api - -import ( - "fmt" - "strings" - - "github.com/alcionai/clues" - abstractions "github.com/microsoft/kiota-abstractions-go" - "github.com/microsoftgraph/msgraph-sdk-go/users" -) - -// ----------------------------------------------------------------------- -// Constant Section -// Defines the allowable strings that can be passed into -// selectors for M365 objects -// ----------------------------------------------------------------------- -var ( - fieldsForCalendars = map[string]struct{}{ - "changeKey": {}, - "events": {}, - "id": {}, - "isDefaultCalendar": {}, - "name": {}, - "owner": {}, - } - - fieldsForFolders = map[string]struct{}{ - "childFolderCount": {}, - "displayName": {}, - "id": {}, - "isHidden": {}, - "parentFolderId": {}, - "totalItemCount": {}, - "unreadItemCount": {}, - } - - fieldsForMessages = map[string]struct{}{ - "conservationId": {}, - "conversationIndex": {}, - "parentFolderId": {}, - "subject": {}, - "webLink": {}, - "id": {}, - "isRead": {}, - } - - fieldsForContacts = map[string]struct{}{ - "id": {}, - "companyName": {}, - "department": {}, - "displayName": {}, - "fileAs": {}, - "givenName": {}, - "manager": {}, - "parentFolderId": {}, - } -) - -const ( - // headerKeyPrefer is used to set query preferences - headerKeyPrefer = "Prefer" - // maxPageSizeHeaderFmt is used to indicate max page size - // preferences - maxPageSizeHeaderFmt = "odata.maxpagesize=%d" - // deltaMaxPageSize is the max page size to use for delta queries - deltaMaxPageSize = 200 - idTypeFmt = "IdType=%q" - immutableIDType = "ImmutableId" -) - -// ----------------------------------------------------------------------- -// exchange.Query Option Section -// These functions can be used to filter a response on M365 -// Graph queries and reduce / filter the amount of data returned -// which reduces the overall latency of complex calls -// ----------------------------------------------------------------------- - -// optionsForCalendars places allowed options for exchange.Calendar object -// @param moreOps should reflect elements from fieldsForCalendars -// @return is first call in Calendars().GetWithRequestConfigurationAndResponseHandler -func optionsForCalendars(moreOps []string) ( - *users.ItemCalendarsRequestBuilderGetRequestConfiguration, - error, -) { - selecting, err := buildOptions(moreOps, fieldsForCalendars) - if err != nil { - return nil, err - } - // should be a CalendarsRequestBuilderGetRequestConfiguration - requestParams := &users.ItemCalendarsRequestBuilderGetQueryParameters{ - Select: selecting, - } - options := &users.ItemCalendarsRequestBuilderGetRequestConfiguration{ - QueryParameters: requestParams, - } - - return options, nil -} - -// optionsForCalendarsByID places allowed options for exchange.Calendar object -// @param moreOps should reflect elements from fieldsForCalendars -// @return is first call in Calendars().GetWithRequestConfigurationAndResponseHandler -func optionsForCalendarsByID(moreOps []string) ( - *users.ItemCalendarsCalendarItemRequestBuilderGetRequestConfiguration, - error, -) { - selecting, err := buildOptions(moreOps, fieldsForCalendars) - if err != nil { - return nil, err - } - // should be a CalendarsRequestBuilderGetRequestConfiguration - requestParams := &users.ItemCalendarsCalendarItemRequestBuilderGetQueryParameters{ - Select: selecting, - } - options := &users.ItemCalendarsCalendarItemRequestBuilderGetRequestConfiguration{ - QueryParameters: requestParams, - } - - return options, nil -} - -func optionsForContactFolderByID(moreOps []string) ( - *users.ItemContactFoldersContactFolderItemRequestBuilderGetRequestConfiguration, - error, -) { - selecting, err := buildOptions(moreOps, fieldsForFolders) - if err != nil { - return nil, err - } - - requestParameters := &users.ItemContactFoldersContactFolderItemRequestBuilderGetQueryParameters{ - Select: selecting, - } - options := &users.ItemContactFoldersContactFolderItemRequestBuilderGetRequestConfiguration{ - QueryParameters: requestParameters, - } - - return options, nil -} - -// optionsForMailFoldersItem transforms the options into a more dynamic call for MailFoldersById. -// moreOps is a []string of options(e.g. "displayName", "isHidden") -// Returns first call in MailFoldersById().GetWithRequestConfigurationAndResponseHandler(options, handler) -func optionsForMailFoldersItem( - moreOps []string, -) (*users.ItemMailFoldersMailFolderItemRequestBuilderGetRequestConfiguration, error) { - selecting, err := buildOptions(moreOps, fieldsForFolders) - if err != nil { - return nil, err - } - - requestParameters := &users.ItemMailFoldersMailFolderItemRequestBuilderGetQueryParameters{ - Select: selecting, - } - options := &users.ItemMailFoldersMailFolderItemRequestBuilderGetRequestConfiguration{ - QueryParameters: requestParameters, - } - - return options, nil -} - -// optionsForContactChildFolders builds a contacts child folders request. -func optionsForContactChildFolders( - moreOps []string, -) (*users.ItemContactFoldersItemChildFoldersRequestBuilderGetRequestConfiguration, error) { - selecting, err := buildOptions(moreOps, fieldsForContacts) - if err != nil { - return nil, err - } - - requestParameters := &users.ItemContactFoldersItemChildFoldersRequestBuilderGetQueryParameters{ - Select: selecting, - } - options := &users.ItemContactFoldersItemChildFoldersRequestBuilderGetRequestConfiguration{ - QueryParameters: requestParameters, - } - - return options, nil -} - -// buildOptions - Utility Method for verifying if select options are valid for the m365 object type -// @return is a pair. The first is a string literal of allowable options based on the object type, -// the second is an error. An error is returned if an unsupported option or optionIdentifier was used -func buildOptions(fields []string, allowed map[string]struct{}) ([]string, error) { - returnedOptions := []string{"id"} - - for _, entry := range fields { - _, ok := allowed[entry] - if !ok { - return nil, clues.New("unsupported field: " + entry) - } - } - - return append(returnedOptions, fields...), nil -} - -// buildPreferHeaders returns the headers we add to item delta page -// requests. -func buildPreferHeaders(pageSize, immutableID bool) *abstractions.RequestHeaders { - var allHeaders []string - - if pageSize { - allHeaders = append(allHeaders, fmt.Sprintf(maxPageSizeHeaderFmt, deltaMaxPageSize)) - } - - if immutableID { - allHeaders = append(allHeaders, fmt.Sprintf(idTypeFmt, immutableIDType)) - } - - headers := abstractions.NewRequestHeaders() - headers.Add(headerKeyPrefer, strings.Join(allHeaders, ",")) - - return headers -} diff --git a/src/pkg/services/m365/api/query_params.go b/src/pkg/services/m365/api/query_params.go new file mode 100644 index 000000000..68eff9962 --- /dev/null +++ b/src/pkg/services/m365/api/query_params.go @@ -0,0 +1,26 @@ +package api + +import ( + "fmt" + "strings" + + abstractions "github.com/microsoft/kiota-abstractions-go" +) + +// buildPreferHeaders returns the headers we add to item delta page requests. +func buildPreferHeaders(pageSize, immutableID bool) *abstractions.RequestHeaders { + var allHeaders []string + + if pageSize { + allHeaders = append(allHeaders, fmt.Sprintf("odata.maxpagesize=%d", maxPageSize)) + } + + if immutableID { + allHeaders = append(allHeaders, `IdType="ImmutableId"`) + } + + headers := abstractions.NewRequestHeaders() + headers.Add("Prefer", strings.Join(allHeaders, ",")) + + return headers +} diff --git a/src/pkg/services/m365/api/users.go b/src/pkg/services/m365/api/users.go index 6bba52de5..108b558bc 100644 --- a/src/pkg/services/m365/api/users.go +++ b/src/pkg/services/m365/api/users.go @@ -14,6 +14,8 @@ import ( "github.com/alcionai/corso/src/internal/common/idname" "github.com/alcionai/corso/src/internal/common/ptr" + "github.com/alcionai/corso/src/internal/common/str" + "github.com/alcionai/corso/src/internal/common/tform" "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/logger" @@ -394,90 +396,90 @@ func (c Users) getMailboxSettings( additionalData := settings.GetAdditionalData() - mi.ArchiveFolder, err = toString(ctx, "archiveFolder", additionalData) + mi.ArchiveFolder, err = str.FromMapToAny("archiveFolder", additionalData) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.Timezone, err = toString(ctx, "timeZone", additionalData) + mi.Timezone, err = str.FromMapToAny("timeZone", additionalData) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.DateFormat, err = toString(ctx, "dateFormat", additionalData) + mi.DateFormat, err = str.FromMapToAny("dateFormat", additionalData) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.TimeFormat, err = toString(ctx, "timeFormat", additionalData) + mi.TimeFormat, err = str.FromMapToAny("timeFormat", additionalData) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.Purpose, err = toString(ctx, "userPurpose", additionalData) + mi.Purpose, err = str.FromMapToAny("userPurpose", additionalData) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.DelegateMeetMsgDeliveryOpt, err = toString(ctx, "delegateMeetingMessageDeliveryOptions", additionalData) + mi.DelegateMeetMsgDeliveryOpt, err = str.FromMapToAny("delegateMeetingMessageDeliveryOptions", additionalData) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) // decode automatic replies settings - replySetting, err := toT[map[string]any](ctx, "automaticRepliesSetting", additionalData) + replySetting, err := tform.FromMapToAny[map[string]any]("automaticRepliesSetting", additionalData) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.AutomaticRepliesSetting.Status, err = toString(ctx, "status", replySetting) + mi.AutomaticRepliesSetting.Status, err = str.FromMapToAny("status", replySetting) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.AutomaticRepliesSetting.ExternalAudience, err = toString(ctx, "externalAudience", replySetting) + mi.AutomaticRepliesSetting.ExternalAudience, err = str.FromMapToAny("externalAudience", replySetting) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.AutomaticRepliesSetting.ExternalReplyMessage, err = toString(ctx, "externalReplyMessage", replySetting) + mi.AutomaticRepliesSetting.ExternalReplyMessage, err = str.FromMapToAny("externalReplyMessage", replySetting) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.AutomaticRepliesSetting.InternalReplyMessage, err = toString(ctx, "internalReplyMessage", replySetting) + mi.AutomaticRepliesSetting.InternalReplyMessage, err = str.FromMapToAny("internalReplyMessage", replySetting) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) // decode scheduledStartDateTime - startDateTime, err := toT[map[string]any](ctx, "scheduledStartDateTime", replySetting) + startDateTime, err := tform.FromMapToAny[map[string]any]("scheduledStartDateTime", replySetting) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.AutomaticRepliesSetting.ScheduledStartDateTime.DateTime, err = toString(ctx, "dateTime", startDateTime) + mi.AutomaticRepliesSetting.ScheduledStartDateTime.DateTime, err = str.FromMapToAny("dateTime", startDateTime) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.AutomaticRepliesSetting.ScheduledStartDateTime.Timezone, err = toString(ctx, "timeZone", startDateTime) + mi.AutomaticRepliesSetting.ScheduledStartDateTime.Timezone, err = str.FromMapToAny("timeZone", startDateTime) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - endDateTime, err := toT[map[string]any](ctx, "scheduledEndDateTime", replySetting) + endDateTime, err := tform.FromMapToAny[map[string]any]("scheduledEndDateTime", replySetting) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.AutomaticRepliesSetting.ScheduledEndDateTime.DateTime, err = toString(ctx, "dateTime", endDateTime) + mi.AutomaticRepliesSetting.ScheduledEndDateTime.DateTime, err = str.FromMapToAny("dateTime", endDateTime) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.AutomaticRepliesSetting.ScheduledEndDateTime.Timezone, err = toString(ctx, "timeZone", endDateTime) + mi.AutomaticRepliesSetting.ScheduledEndDateTime.Timezone, err = str.FromMapToAny("timeZone", endDateTime) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) // Language decode - language, err := toT[map[string]any](ctx, "language", additionalData) + language, err := tform.FromMapToAny[map[string]any]("language", additionalData) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.Language.DisplayName, err = toString(ctx, "displayName", language) + mi.Language.DisplayName, err = str.FromMapToAny("displayName", language) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.Language.Locale, err = toString(ctx, "locale", language) + mi.Language.Locale, err = str.FromMapToAny("locale", language) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) // working hours - workingHours, err := toT[map[string]any](ctx, "workingHours", additionalData) + workingHours, err := tform.FromMapToAny[map[string]any]("workingHours", additionalData) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.WorkingHours.StartTime, err = toString(ctx, "startTime", workingHours) + mi.WorkingHours.StartTime, err = str.FromMapToAny("startTime", workingHours) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.WorkingHours.EndTime, err = toString(ctx, "endTime", workingHours) + mi.WorkingHours.EndTime, err = str.FromMapToAny("endTime", workingHours) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - timeZone, err := toT[map[string]any](ctx, "timeZone", workingHours) + timeZone, err := tform.FromMapToAny[map[string]any]("timeZone", workingHours) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - mi.WorkingHours.TimeZone.Name, err = toString(ctx, "name", timeZone) + mi.WorkingHours.TimeZone.Name, err = str.FromMapToAny("name", timeZone) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) - days, err := toT[[]any](ctx, "daysOfWeek", workingHours) + days, err := tform.FromMapToAny[[]any]("daysOfWeek", workingHours) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) for _, day := range days { - s, err := anyToString(ctx, "dayOfTheWeek", day) + s, err := str.FromAny(day) mi.ErrGetMailBoxSetting = appendIfErr(mi.ErrGetMailBoxSetting, err) mi.WorkingHours.DaysOfWeek = append(mi.WorkingHours.DaysOfWeek, s) } @@ -510,53 +512,3 @@ func validateUser(item models.Userable) error { return nil } - -func toString(ctx context.Context, key string, data map[string]any) (string, error) { - ctx = clues.Add(ctx, "setting_name", key) - - if len(data) == 0 { - logger.Ctx(ctx).Info("not found: ", key) - return "", ErrMailBoxSettingsNotFound - } - - return anyToString(ctx, key, data[key]) -} - -func anyToString(ctx context.Context, key string, val any) (string, error) { - if val == nil { - logger.Ctx(ctx).Info("nil value: ", key) - return "", ErrMailBoxSettingsNotFound - } - - sp, ok := val.(*string) - if !ok { - logger.Ctx(ctx).Info("value is not a *string: ", key) - return "", ErrMailBoxSettingsNotFound - } - - return ptr.Val(sp), nil -} - -func toT[T any](ctx context.Context, key string, data map[string]any) (T, error) { - ctx = clues.Add(ctx, "setting_name", key) - - if len(data) == 0 { - logger.Ctx(ctx).Info("not found: ", key) - return *new(T), ErrMailBoxSettingsNotFound - } - - val := data[key] - - if data == nil { - logger.Ctx(ctx).Info("nil value: ", key) - return *new(T), ErrMailBoxSettingsNotFound - } - - value, ok := val.(T) - if !ok { - logger.Ctx(ctx).Info(fmt.Sprintf("unexpected type for %s: %T", key, val)) - return *new(T), ErrMailBoxSettingsNotFound - } - - return value, nil -} diff --git a/src/pkg/storage/s3.go b/src/pkg/storage/s3.go index baa497b71..17fe89f02 100644 --- a/src/pkg/storage/s3.go +++ b/src/pkg/storage/s3.go @@ -6,6 +6,7 @@ import ( "github.com/alcionai/clues" "github.com/alcionai/corso/src/internal/common" + "github.com/alcionai/corso/src/internal/common/str" ) type S3Config struct { @@ -68,8 +69,8 @@ func (s Storage) S3Config() (S3Config, error) { c.Bucket = orEmptyString(s.Config[keyS3Bucket]) c.Endpoint = orEmptyString(s.Config[keyS3Endpoint]) c.Prefix = orEmptyString(s.Config[keyS3Prefix]) - c.DoNotUseTLS = common.ParseBool(s.Config[keyS3DoNotUseTLS]) - c.DoNotVerifyTLS = common.ParseBool(s.Config[keyS3DoNotVerifyTLS]) + c.DoNotUseTLS = str.ParseBool(s.Config[keyS3DoNotUseTLS]) + c.DoNotVerifyTLS = str.ParseBool(s.Config[keyS3DoNotVerifyTLS]) } return c, c.validate() From 7057d94e352560200c6fd44fcd53d8a427e405e6 Mon Sep 17 00:00:00 2001 From: jules <130390278+juleslasarte@users.noreply.github.com> Date: Thu, 18 May 2023 13:25:32 -0700 Subject: [PATCH 06/13] Adding two new apis to corso for validating a user has exchange or one drive is enabled (#3447) Adds two new apis that expose calls to check whether a user has one drive or exchange enabled --- #### Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No #### Type of change - [x] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [x] :zap: Unit test - [x] :green_heart: E2E --- src/pkg/services/m365/m365.go | 82 ++++++++++++++++++++++++++---- src/pkg/services/m365/m365_test.go | 30 +++++++++++ 2 files changed, 102 insertions(+), 10 deletions(-) diff --git a/src/pkg/services/m365/m365.go b/src/pkg/services/m365/m365.go index f4851e9ef..7ad8271e8 100644 --- a/src/pkg/services/m365/m365.go +++ b/src/pkg/services/m365/m365.go @@ -2,13 +2,16 @@ package m365 import ( "context" + "net/http" "github.com/alcionai/clues" "github.com/microsoftgraph/msgraph-sdk-go/models" + "github.com/microsoftgraph/msgraph-sdk-go/users" "github.com/alcionai/corso/src/internal/common/idname" "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector/discovery" + "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/pkg/account" "github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/services/m365/api" @@ -47,12 +50,12 @@ type UserNoInfo struct { func UsersCompat(ctx context.Context, acct account.Account) ([]*User, error) { errs := fault.New(true) - users, err := Users(ctx, acct, errs) + us, err := Users(ctx, acct, errs) if err != nil { return nil, err } - return users, errs.Failure() + return us, errs.Failure() } // UsersCompatNoInfo returns a list of users in the specified M365 tenant. @@ -61,12 +64,71 @@ func UsersCompat(ctx context.Context, acct account.Account) ([]*User, error) { func UsersCompatNoInfo(ctx context.Context, acct account.Account) ([]*UserNoInfo, error) { errs := fault.New(true) - users, err := usersNoInfo(ctx, acct, errs) + us, err := usersNoInfo(ctx, acct, errs) if err != nil { return nil, err } - return users, errs.Failure() + return us, errs.Failure() +} + +// UserHasMailbox returns true if the user has an exchange mailbox enabled +// false otherwise, and a nil pointer and an error in case of error +func UserHasMailbox(ctx context.Context, acct account.Account, userID string) (bool, error) { + uapi, err := makeUserAPI(acct) + if err != nil { + return false, clues.Wrap(err, "getting mailbox").WithClues(ctx) + } + + requestParameters := users.ItemMailFoldersRequestBuilderGetQueryParameters{ + Select: []string{"id"}, + Top: ptr.To[int32](1), // if we get any folders, then we have access. + } + + options := users.ItemMailFoldersRequestBuilderGetRequestConfiguration{ + QueryParameters: &requestParameters, + } + + _, err = uapi.GetMailFolders(ctx, userID, options) + if err != nil { + if graph.IsErrUserNotFound(err) { + return false, clues.Stack(graph.ErrResourceOwnerNotFound, err) + } + + if !graph.IsErrExchangeMailFolderNotFound(err) || + clues.HasLabel(err, graph.LabelStatus(http.StatusNotFound)) { + return false, err + } + + return false, nil + } + + return true, nil +} + +// UserHasDrives returns true if the user has any drives +// false otherwise, and a nil pointer and an error in case of error +func UserHasDrives(ctx context.Context, acct account.Account, userID string) (bool, error) { + uapi, err := makeUserAPI(acct) + if err != nil { + return false, clues.Wrap(err, "getting drives").WithClues(ctx) + } + + _, err = uapi.GetDrives(ctx, userID) + if err != nil { + if graph.IsErrUserNotFound(err) { + return false, clues.Stack(graph.ErrResourceOwnerNotFound, err) + } + + if !graph.IsErrExchangeMailFolderNotFound(err) || + clues.HasLabel(err, graph.LabelStatus(http.StatusNotFound)) { + return false, err + } + + return false, nil + } + + return true, nil } // usersNoInfo returns a list of users in the specified M365 tenant - with no info @@ -78,14 +140,14 @@ func usersNoInfo(ctx context.Context, acct account.Account, errs *fault.Bus) ([] return nil, clues.Wrap(err, "getting users").WithClues(ctx) } - users, err := discovery.Users(ctx, uapi, errs) + us, err := discovery.Users(ctx, uapi, errs) if err != nil { return nil, err } - ret := make([]*UserNoInfo, 0, len(users)) + ret := make([]*UserNoInfo, 0, len(us)) - for _, u := range users { + for _, u := range us { pu, err := parseUser(u) if err != nil { return nil, clues.Wrap(err, "formatting user data") @@ -110,14 +172,14 @@ func Users(ctx context.Context, acct account.Account, errs *fault.Bus) ([]*User, return nil, clues.Wrap(err, "getting users").WithClues(ctx) } - users, err := discovery.Users(ctx, uapi, errs) + us, err := discovery.Users(ctx, uapi, errs) if err != nil { return nil, err } - ret := make([]*User, 0, len(users)) + ret := make([]*User, 0, len(us)) - for _, u := range users { + for _, u := range us { pu, err := parseUser(u) if err != nil { return nil, clues.Wrap(err, "formatting user data") diff --git a/src/pkg/services/m365/m365_test.go b/src/pkg/services/m365/m365_test.go index 46028ee3f..f9ff88652 100644 --- a/src/pkg/services/m365/m365_test.go +++ b/src/pkg/services/m365/m365_test.go @@ -102,6 +102,36 @@ func (suite *M365IntegrationSuite) TestGetUserInfo() { assert.Equal(t, "user", info.Mailbox.Purpose) } +func (suite *M365IntegrationSuite) TestUserHasMailbox() { + ctx, flush := tester.NewContext() + defer flush() + + var ( + t = suite.T() + acct = tester.NewM365Account(t) + uid = tester.M365UserID(t) + ) + + enabled, err := m365.UserHasMailbox(ctx, acct, uid) + require.NoError(t, err, clues.ToCore(err)) + assert.True(t, enabled) +} + +func (suite *M365IntegrationSuite) TestUserHasDrive() { + ctx, flush := tester.NewContext() + defer flush() + + var ( + t = suite.T() + acct = tester.NewM365Account(t) + uid = tester.M365UserID(t) + ) + + enabled, err := m365.UserHasDrives(ctx, acct, uid) + require.NoError(t, err, clues.ToCore(err)) + assert.True(t, enabled) +} + func (suite *M365IntegrationSuite) TestSites() { ctx, flush := tester.NewContext() defer flush() From d0c153aa159ddc2ed7eae925e8db160ac64486a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 08:05:00 +0000 Subject: [PATCH 07/13] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20github.com/aw?= =?UTF-8?q?s/aws-sdk-go=20from=201.44.264=20to=201.44.265=20in=20/src=20(#?= =?UTF-8?q?3458)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.44.264 to 1.44.265.
    Release notes

    Sourced from github.com/aws/aws-sdk-go's releases.

    Release v1.44.265 (2023-05-18)

    Service Client Updates

    • service/athena: Updates service API and documentation
      • Removing SparkProperties from EngineConfiguration object for StartSession API call
    • service/cloudtrail: Updates service API and documentation
      • Add ConflictException to PutEventSelectors, add (Channel/EDS)ARNInvalidException to Tag APIs. These exceptions provide customers with more specific error messages instead of internal errors.
    • service/compute-optimizer: Updates service API and documentation
    • service/connect: Updates service API and documentation
    • service/ec2: Updates service API and documentation
      • Add support for i4g.large, i4g.xlarge, i4g.2xlarge, i4g.4xlarge, i4g.8xlarge and i4g.16xlarge instances powered by AWS Graviton2 processors that deliver up to 15% better compute performance than our other storage-optimized instances.
    • service/ecs: Updates service documentation
      • Documentation only release to address various tickets.
    • service/mediaconvert: Updates service API and documentation
      • This release introduces a new MXF Profile for XDCAM which is strictly compliant with the SMPTE RDD 9 standard and improved handling of output name modifiers.
    • service/rds: Updates service API, documentation, waiters, paginators, and examples
      • RDS documentation update for the EngineVersion parameter of ModifyDBSnapshot
    • service/sagemaker-geospatial: Updates service API and documentation
    • service/sts: Updates service API
      • API updates for the AWS Security Token Service

    SDK Bugs

    • rest: Remove unnecessary path normalization behavior.
      • This behavior would incorrectly mutate request paths with URI-encoded characters, potentially resulting in misrouted requests.
    • config: Deprecate DisableRestProtocolURICleaning config setting.
      • This setting no longer has any effect. REST-protocol paths will now never be normalized after serialization.
    Commits
    • db19686 Release v1.44.265 (2023-05-18) (#4845)
    • 5220e69 Merge pull request #4832 from aws/iot-topic
    • 2168800 recover some deprecated func
    • ceeb008 recover some deprecated func
    • 30b3388 modify changelog and remove deprecated setting usage
    • 16b4c86 modify changelog description
    • 970e5a0 add unit test cases
    • 966f546 Merge branch 'main' into iot-topic
    • e8df529 remove http request url path cleaning logic and deprecate setting
    • 6e99df2 Merge remote-tracking branch 'origin/iot-topic' into iot-topic
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/aws/aws-sdk-go&package-manager=go_modules&previous-version=1.44.264&new-version=1.44.265)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) You can trigger a rebase of this PR by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --- src/go.mod | 4 ++-- src/go.sum | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/go.mod b/src/go.mod index 94777caa6..008349b5d 100644 --- a/src/go.mod +++ b/src/go.mod @@ -8,7 +8,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 github.com/alcionai/clues v0.0.0-20230406223931-f48777f4773c github.com/armon/go-metrics v0.4.1 - github.com/aws/aws-sdk-go v1.44.264 + github.com/aws/aws-sdk-go v1.44.265 github.com/aws/aws-xray-sdk-go v1.8.1 github.com/cenkalti/backoff/v4 v4.2.1 github.com/google/uuid v1.3.0 @@ -117,7 +117,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.8.0 // indirect golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/net v0.10.0 golang.org/x/sync v0.2.0 // indirect golang.org/x/sys v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect diff --git a/src/go.sum b/src/go.sum index 407ab2941..edca9200f 100644 --- a/src/go.sum +++ b/src/go.sum @@ -66,8 +66,8 @@ github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/aws/aws-sdk-go v1.44.264 h1:5klL62ebn6uv3oJ0ixF7K12hKItj8lV3QqWeQPlkFSs= -github.com/aws/aws-sdk-go v1.44.264/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.265 h1:rlBuD8OYjM5Vfcf7jDa264oVHqlPqY7y7o+JmrjNFUc= +github.com/aws/aws-sdk-go v1.44.265/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-xray-sdk-go v1.8.1 h1:O4pXV+hnCskaamGsZnFpzHyAmgPGusBMN6i7nnsy0Fo= github.com/aws/aws-xray-sdk-go v1.8.1/go.mod h1:wMmVYzej3sykAttNBkXQHK/+clAPWTOrPiajEk7Cp3A= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= From 9520de1a3741e7be38a757e4eba725504df184e4 Mon Sep 17 00:00:00 2001 From: ashmrtn Date: Fri, 19 May 2023 17:05:52 -0700 Subject: [PATCH 08/13] More robust folder fetching for container cache (#3464) Update folder cache population * try to fetch missing parent folders * refresh current folder if parent wasn't cached * only populate paths during populatePaths not during IDToFolder Manually tested email folder resolver population with stable reproducer and succeeded --- #### Does this PR need a docs update or release note? - [x] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [ ] :no_entry: No #### Type of change - [ ] :sunflower: Feature - [x] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) #### Test Plan - [x] :muscle: Manual - [x] :zap: Unit test - [ ] :green_heart: E2E --- CHANGELOG.md | 2 + .../exchange/contact_folder_cache.go | 31 ++- .../connector/exchange/container_resolver.go | 234 ++++++++++++++++-- .../exchange/container_resolver_test.go | 221 ++++++++++++++++- .../exchange/data_collections_test.go | 2 +- .../exchange/event_calendar_cache.go | 6 +- .../connector/exchange/mail_folder_cache.go | 31 ++- src/pkg/services/m365/api/contacts.go | 4 +- src/pkg/services/m365/api/events.go | 4 +- src/pkg/services/m365/api/mail.go | 4 +- 10 files changed, 496 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 475c98407..b36c38580 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Fixed +- Fix Exchange folder cache population error when parent folder isn't found. + ### Known Issues ## [v0.8.0] (beta) - 2023-05-15 diff --git a/src/internal/connector/exchange/contact_folder_cache.go b/src/internal/connector/exchange/contact_folder_cache.go index 79cee76b8..5526bf7b7 100644 --- a/src/internal/connector/exchange/contact_folder_cache.go +++ b/src/internal/connector/exchange/contact_folder_cache.go @@ -11,7 +11,29 @@ import ( "github.com/alcionai/corso/src/pkg/path" ) -var _ graph.ContainerResolver = &contactFolderCache{} +var ( + _ graph.ContainerResolver = &contactFolderCache{} + _ containerRefresher = &contactRefresher{} +) + +type contactRefresher struct { + getter containerGetter + userID string +} + +func (r *contactRefresher) refreshContainer( + ctx context.Context, + id string, +) (graph.CachedContainer, error) { + c, err := r.getter.GetContainerByID(ctx, r.userID, id) + if err != nil { + return nil, clues.Stack(err) + } + + f := graph.NewCacheFolder(c, nil, nil) + + return &f, nil +} type contactFolderCache struct { *containerResolver @@ -34,7 +56,7 @@ func (cfc *contactFolderCache) populateContactRoot( f, path.Builder{}.Append(ptr.Val(f.GetId())), // path of IDs path.Builder{}.Append(baseContainerPath...)) // display location - if err := cfc.addFolder(temp); err != nil { + if err := cfc.addFolder(&temp); err != nil { return clues.Wrap(err, "adding resolver dir").WithClues(ctx) } @@ -77,7 +99,10 @@ func (cfc *contactFolderCache) init( } if cfc.containerResolver == nil { - cfc.containerResolver = newContainerResolver() + cfc.containerResolver = newContainerResolver(&contactRefresher{ + userID: cfc.userID, + getter: cfc.getter, + }) } return cfc.populateContactRoot(ctx, baseNode, baseContainerPath) diff --git a/src/internal/connector/exchange/container_resolver.go b/src/internal/connector/exchange/container_resolver.go index 8ec4f02ff..0e2730449 100644 --- a/src/internal/connector/exchange/container_resolver.go +++ b/src/internal/connector/exchange/container_resolver.go @@ -8,6 +8,7 @@ import ( "github.com/alcionai/corso/src/internal/common/ptr" "github.com/alcionai/corso/src/internal/connector/graph" "github.com/alcionai/corso/src/pkg/fault" + "github.com/alcionai/corso/src/pkg/logger" "github.com/alcionai/corso/src/pkg/path" ) @@ -26,11 +27,18 @@ type containersEnumerator interface { EnumerateContainers( ctx context.Context, userID, baseDirID string, - fn func(graph.CacheFolder) error, + fn func(graph.CachedContainer) error, errs *fault.Bus, ) error } +type containerRefresher interface { + refreshContainer( + ctx context.Context, + dirID string, + ) (graph.CachedContainer, error) +} + // --------------------------------------------------------------------------- // controller // --------------------------------------------------------------------------- @@ -40,59 +48,243 @@ type containersEnumerator interface { // folders if each folder is only a single character. const maxIterations = 300 -func newContainerResolver() *containerResolver { +func newContainerResolver(refresher containerRefresher) *containerResolver { return &containerResolver{ - cache: map[string]graph.CachedContainer{}, + cache: map[string]graph.CachedContainer{}, + refresher: refresher, } } type containerResolver struct { - cache map[string]graph.CachedContainer + cache map[string]graph.CachedContainer + refresher containerRefresher } func (cr *containerResolver) IDToPath( ctx context.Context, folderID string, ) (*path.Builder, *path.Builder, error) { - return cr.idToPath(ctx, folderID, 0) + ctx = clues.Add(ctx, "container_id", folderID) + + c, ok := cr.cache[folderID] + if !ok { + return nil, nil, clues.New("container not cached").WithClues(ctx) + } + + p := c.Path() + if p == nil { + return nil, nil, clues.New("cached container has no path").WithClues(ctx) + } + + return p, c.Location(), nil +} + +// refreshContainer attempts to fetch the container with the given ID from Graph +// API. Returns a graph.CachedContainer if the container was found. If the +// container was deleted, returns nil, true, nil to note the container should +// be removed from the cache. +func (cr *containerResolver) refreshContainer( + ctx context.Context, + id string, +) (graph.CachedContainer, bool, error) { + ctx = clues.Add(ctx, "refresh_container_id", id) + logger.Ctx(ctx).Debug("refreshing container") + + if cr.refresher == nil { + return nil, false, clues.New("nil refresher").WithClues(ctx) + } + + c, err := cr.refresher.refreshContainer(ctx, id) + if err != nil && graph.IsErrDeletedInFlight(err) { + logger.Ctx(ctx).Debug("container deleted") + return nil, true, nil + } else if err != nil { + // This is some other error, just return it. + return nil, false, clues.Wrap(err, "refreshing container").WithClues(ctx) + } + + return c, false, nil +} + +// recoverContainer attempts to fetch a missing container from Graph API and +// populate the path for it. It returns +// - the ID path for the folder +// - the display name path for the folder +// - if the folder was deleted +// - any error that occurred +// +// If the folder is marked as deleted, child folders of this folder should be +// deleted if they haven't been moved to another folder. +func (cr *containerResolver) recoverContainer( + ctx context.Context, + folderID string, + depth int, +) (*path.Builder, *path.Builder, bool, error) { + c, deleted, err := cr.refreshContainer(ctx, folderID) + if err != nil { + return nil, nil, false, clues.Wrap(err, "fetching uncached container") + } + + if deleted { + logger.Ctx(ctx).Debug("fetching uncached container showed it was deleted") + return nil, nil, deleted, err + } + + if err := cr.addFolder(c); err != nil { + return nil, nil, false, clues.Wrap(err, "adding new container").WithClues(ctx) + } + + // Retry populating this container's paths. + // + // TODO(ashmrtn): May want to bump the depth here just so we don't get stuck + // retrying too much if for some reason things keep moving around? + resolved, err := cr.idToPath(ctx, folderID, depth) + if err != nil { + err = clues.Wrap(err, "repopulating uncached container") + } + + return resolved.idPath, resolved.locPath, resolved.deleted, err +} + +type resolvedPath struct { + idPath *path.Builder + locPath *path.Builder + cached bool + deleted bool } func (cr *containerResolver) idToPath( ctx context.Context, folderID string, depth int, -) (*path.Builder, *path.Builder, error) { +) (resolvedPath, error) { ctx = clues.Add(ctx, "container_id", folderID) if depth >= maxIterations { - return nil, nil, clues.New("path contains cycle or is too tall").WithClues(ctx) + return resolvedPath{ + idPath: nil, + locPath: nil, + cached: false, + deleted: false, + }, clues.New("path contains cycle or is too tall").WithClues(ctx) } c, ok := cr.cache[folderID] if !ok { - return nil, nil, clues.New("folder not cached").WithClues(ctx) + pth, loc, deleted, err := cr.recoverContainer(ctx, folderID, depth) + if err != nil { + err = clues.Stack(err) + } + + return resolvedPath{ + idPath: pth, + locPath: loc, + cached: false, + deleted: deleted, + }, err } p := c.Path() if p != nil { - return p, c.Location(), nil + return resolvedPath{ + idPath: p, + locPath: c.Location(), + cached: true, + deleted: false, + }, nil } - parentPath, parentLoc, err := cr.idToPath( + resolved, err := cr.idToPath( ctx, ptr.Val(c.GetParentFolderId()), depth+1) if err != nil { - return nil, nil, clues.Wrap(err, "retrieving parent folder") + return resolvedPath{ + idPath: nil, + locPath: nil, + cached: true, + deleted: false, + }, clues.Wrap(err, "retrieving parent container") } - fullPath := parentPath.Append(ptr.Val(c.GetId())) + if !resolved.cached { + logger.Ctx(ctx).Debug("parent container was refreshed") + + newContainer, shouldDelete, err := cr.refreshContainer(ctx, folderID) + if err != nil { + return resolvedPath{ + idPath: nil, + locPath: nil, + cached: true, + deleted: false, + }, clues.Wrap(err, "refreshing container").WithClues(ctx) + } + + if shouldDelete { + logger.Ctx(ctx).Debug("refreshing container showed it was deleted") + delete(cr.cache, folderID) + + return resolvedPath{ + idPath: nil, + locPath: nil, + cached: true, + deleted: true, + }, nil + } + + // See if the newer version of the current container we got back has + // changed. If it has then it could be that the container was moved prior to + // deleting the parent and we just hit some eventual consistency case in + // Graph. + // + // TODO(ashmrtn): May want to bump the depth here just so we don't get stuck + // retrying too much if for some reason things keep moving around? + if ptr.Val(newContainer.GetParentFolderId()) != ptr.Val(c.GetParentFolderId()) || + ptr.Val(newContainer.GetDisplayName()) != ptr.Val(c.GetDisplayName()) { + delete(cr.cache, folderID) + + if err := cr.addFolder(newContainer); err != nil { + return resolvedPath{ + idPath: nil, + locPath: nil, + cached: false, + deleted: false, + }, clues.Wrap(err, "updating cached container").WithClues(ctx) + } + + return cr.idToPath(ctx, folderID, depth) + } + } + + // If the parent wasn't found and refreshing the current container produced no + // diffs then delete the current container on the assumption that the parent + // was deleted and the current container will later get deleted via eventual + // consistency. If w're wrong then the container will get picked up again on + // the next backup. + if resolved.deleted { + logger.Ctx(ctx).Debug("deleting container since parent was deleted") + delete(cr.cache, folderID) + + return resolvedPath{ + idPath: nil, + locPath: nil, + cached: true, + deleted: true, + }, nil + } + + fullPath := resolved.idPath.Append(ptr.Val(c.GetId())) c.SetPath(fullPath) - locPath := parentLoc.Append(ptr.Val(c.GetDisplayName())) + locPath := resolved.locPath.Append(ptr.Val(c.GetDisplayName())) c.SetLocation(locPath) - return fullPath, locPath, nil + return resolvedPath{ + idPath: fullPath, + locPath: locPath, + cached: true, + deleted: false, + }, nil } // PathInCache is a utility function to return m365ID of a folder if the @@ -139,14 +331,14 @@ func (cr *containerResolver) LocationInCache(pathString string) (string, bool) { // addFolder adds a folder to the cache with the given ID. If the item is // already in the cache does nothing. The path for the item is not modified. -func (cr *containerResolver) addFolder(cf graph.CacheFolder) error { +func (cr *containerResolver) addFolder(cf graph.CachedContainer) error { // Only require a non-nil non-empty parent if the path isn't already populated. if cf.Path() != nil { - if err := checkIDAndName(cf.Container); err != nil { + if err := checkIDAndName(cf); err != nil { return clues.Wrap(err, "adding item to cache") } } else { - if err := checkRequiredValues(cf.Container); err != nil { + if err := checkRequiredValues(cf); err != nil { return clues.Wrap(err, "adding item to cache") } } @@ -155,7 +347,7 @@ func (cr *containerResolver) addFolder(cf graph.CacheFolder) error { return nil } - cr.cache[ptr.Val(cf.GetId())] = &cf + cr.cache[ptr.Val(cf.GetId())] = cf return nil } @@ -176,7 +368,7 @@ func (cr *containerResolver) AddToCache( ctx context.Context, f graph.Container, ) error { - temp := graph.CacheFolder{ + temp := &graph.CacheFolder{ Container: f, } if err := cr.addFolder(temp); err != nil { @@ -185,7 +377,7 @@ func (cr *containerResolver) AddToCache( // Populate the path for this entry so calls to PathInCache succeed no matter // when they're made. - _, _, err := cr.IDToPath(ctx, ptr.Val(f.GetId())) + _, err := cr.idToPath(ctx, ptr.Val(f.GetId()), 0) if err != nil { return clues.Wrap(err, "adding cache entry") } @@ -208,7 +400,7 @@ func (cr *containerResolver) populatePaths( return el.Failure() } - _, _, err := cr.IDToPath(ctx, ptr.Val(f.GetId())) + _, err := cr.idToPath(ctx, ptr.Val(f.GetId()), 0) if err != nil { err = clues.Wrap(err, "populating path") el.AddRecoverable(err) diff --git a/src/internal/connector/exchange/container_resolver_test.go b/src/internal/connector/exchange/container_resolver_test.go index de050d25a..a79daa58f 100644 --- a/src/internal/connector/exchange/container_resolver_test.go +++ b/src/internal/connector/exchange/container_resolver_test.go @@ -1,6 +1,7 @@ package exchange import ( + "context" "fmt" stdpath "path" "testing" @@ -232,8 +233,8 @@ func (suite *FolderCacheUnitSuite) TestAddFolder() { for _, test := range table { suite.Run(test.name, func() { - fc := newContainerResolver() - err := fc.addFolder(test.cf) + fc := newContainerResolver(nil) + err := fc.addFolder(&test.cf) test.check(suite.T(), err, clues.ToCore(err)) }) } @@ -293,7 +294,7 @@ func resolverWithContainers(numContainers int, useIDInPath bool) (*containerReso containers[i].expectedLocation = stdpath.Join(containers[i-1].expectedLocation, dn) } - resolver := newContainerResolver() + resolver := newContainerResolver(nil) for _, c := range containers { resolver.cache[c.id] = c @@ -302,6 +303,37 @@ func resolverWithContainers(numContainers int, useIDInPath bool) (*containerReso return resolver, containers } +// --------------------------------------------------------------------------- +// mock container refresher +// --------------------------------------------------------------------------- + +type refreshResult struct { + err error + c graph.CachedContainer +} + +type mockContainerRefresher struct { + // Folder ID -> result + entries map[string]refreshResult +} + +func (r mockContainerRefresher) refreshContainer( + ctx context.Context, + id string, +) (graph.CachedContainer, error) { + rr, ok := r.entries[id] + if !ok { + // May not be this precise error, but it's easy to get a handle on. + return nil, graph.ErrDeletedInFlight + } + + if rr.err != nil { + return nil, rr.err + } + + return rr.c, nil +} + // --------------------------------------------------------------------------- // configured unit suite // --------------------------------------------------------------------------- @@ -326,6 +358,160 @@ func TestConfiguredFolderCacheUnitSuite(t *testing.T) { suite.Run(t, &ConfiguredFolderCacheUnitSuite{Suite: tester.NewUnitSuite(t)}) } +func (suite *ConfiguredFolderCacheUnitSuite) TestRefreshContainer_RefreshParent() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + + resolver, containers := resolverWithContainers(4, true) + almostLast := containers[len(containers)-2] + last := containers[len(containers)-1] + + refresher := mockContainerRefresher{ + entries: map[string]refreshResult{ + almostLast.id: {c: almostLast}, + last.id: {c: last}, + }, + } + + resolver.refresher = refresher + + delete(resolver.cache, almostLast.id) + + ferrs := fault.New(true) + err := resolver.populatePaths(ctx, ferrs) + require.NoError(t, err, "populating paths", clues.ToCore(err)) + + p, l, err := resolver.IDToPath(ctx, last.id) + require.NoError(t, err, "getting paths", clues.ToCore(err)) + + assert.Equal(t, last.expectedPath, p.String()) + assert.Equal(t, last.expectedLocation, l.String()) +} + +func (suite *ConfiguredFolderCacheUnitSuite) TestRefreshContainer_RefreshParent_NotFoundDeletes() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + + resolver, containers := resolverWithContainers(4, true) + almostLast := containers[len(containers)-2] + last := containers[len(containers)-1] + + refresher := mockContainerRefresher{ + entries: map[string]refreshResult{ + last.id: {c: last}, + }, + } + + resolver.refresher = refresher + + delete(resolver.cache, almostLast.id) + + ferrs := fault.New(true) + err := resolver.populatePaths(ctx, ferrs) + require.NoError(t, err, "populating paths", clues.ToCore(err)) + + _, _, err = resolver.IDToPath(ctx, last.id) + assert.Error(t, err, "getting paths", clues.ToCore(err)) +} + +func (suite *ConfiguredFolderCacheUnitSuite) TestRefreshContainer_RefreshAncestor_NotFoundDeletes() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + + resolver, containers := resolverWithContainers(4, true) + gone := containers[0] + child := containers[1] + last := containers[len(containers)-1] + + refresher := mockContainerRefresher{ + entries: map[string]refreshResult{ + child.id: {c: child}, + }, + } + + resolver.refresher = refresher + + delete(resolver.cache, gone.id) + + ferrs := fault.New(true) + err := resolver.populatePaths(ctx, ferrs) + require.NoError(t, err, "populating paths", clues.ToCore(err)) + + _, _, err = resolver.IDToPath(ctx, last.id) + assert.Error(t, err, "getting paths", clues.ToCore(err)) +} + +func (suite *ConfiguredFolderCacheUnitSuite) TestRefreshContainer_RefreshAncestor_NewParent() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + + resolver, containers := resolverWithContainers(4, true) + other := containers[len(containers)-3] + gone := containers[len(containers)-2] + last := containers[len(containers)-1] + + expected := *last + expected.parentID = other.id + expected.expectedPath = stdpath.Join(other.expectedPath, expected.id) + expected.expectedLocation = stdpath.Join(other.expectedLocation, expected.displayName) + + refresher := mockContainerRefresher{ + entries: map[string]refreshResult{ + last.id: {c: &expected}, + }, + } + + resolver.refresher = refresher + + delete(resolver.cache, gone.id) + + ferrs := fault.New(true) + err := resolver.populatePaths(ctx, ferrs) + require.NoError(t, err, "populating paths", clues.ToCore(err)) + + p, l, err := resolver.IDToPath(ctx, last.id) + require.NoError(t, err, "getting paths", clues.ToCore(err)) + + assert.Equal(t, expected.expectedPath, p.String()) + assert.Equal(t, expected.expectedLocation, l.String()) +} + +func (suite *ConfiguredFolderCacheUnitSuite) TestRefreshContainer_RefreshFolder_FolderDeleted() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + + resolver, containers := resolverWithContainers(4, true) + parent := containers[len(containers)-2] + last := containers[len(containers)-1] + + refresher := mockContainerRefresher{ + entries: map[string]refreshResult{ + parent.id: {c: parent}, + }, + } + + resolver.refresher = refresher + + delete(resolver.cache, parent.id) + + ferrs := fault.New(true) + err := resolver.populatePaths(ctx, ferrs) + require.NoError(t, err, "populating paths", clues.ToCore(err)) + + _, _, err = resolver.IDToPath(ctx, last.id) + assert.Error(t, err, "getting paths", clues.ToCore(err)) +} + func (suite *ConfiguredFolderCacheUnitSuite) TestDepthLimit() { ctx, flush := tester.NewContext() defer flush() @@ -350,7 +536,7 @@ func (suite *ConfiguredFolderCacheUnitSuite) TestDepthLimit() { for _, test := range table { suite.Run(test.name, func() { resolver, containers := resolverWithContainers(test.numContainers, false) - _, _, err := resolver.IDToPath(ctx, containers[len(containers)-1].id) + _, err := resolver.idToPath(ctx, containers[len(containers)-1].id, 0) test.check(suite.T(), err, clues.ToCore(err)) }) } @@ -384,6 +570,9 @@ func (suite *ConfiguredFolderCacheUnitSuite) TestLookupCachedFolderNoPathsCached ctx, flush := tester.NewContext() defer flush() + err := suite.fc.populatePaths(ctx, fault.New(true)) + require.NoError(suite.T(), err, clues.ToCore(err)) + for _, c := range suite.allContainers { suite.Run(ptr.Val(c.GetDisplayName()), func() { t := suite.T() @@ -396,10 +585,14 @@ func (suite *ConfiguredFolderCacheUnitSuite) TestLookupCachedFolderNoPathsCached } } +// TODO(ashmrtn): Remove this since the same cache can do IDs or locations. func (suite *ConfiguredFolderCacheUnitSuite) TestLookupCachedFolderNoPathsCached_useID() { ctx, flush := tester.NewContext() defer flush() + err := suite.fcWithID.populatePaths(ctx, fault.New(true)) + require.NoError(suite.T(), err, clues.ToCore(err)) + for _, c := range suite.containersWithID { suite.Run(ptr.Val(c.GetDisplayName()), func() { t := suite.T() @@ -419,6 +612,9 @@ func (suite *ConfiguredFolderCacheUnitSuite) TestLookupCachedFolderCachesPaths() t := suite.T() c := suite.allContainers[len(suite.allContainers)-1] + err := suite.fc.populatePaths(ctx, fault.New(true)) + require.NoError(t, err, clues.ToCore(err)) + p, l, err := suite.fc.IDToPath(ctx, c.id) require.NoError(t, err, clues.ToCore(err)) assert.Equal(t, c.expectedPath, p.String()) @@ -432,6 +628,7 @@ func (suite *ConfiguredFolderCacheUnitSuite) TestLookupCachedFolderCachesPaths() assert.Equal(t, c.expectedLocation, l.String()) } +// TODO(ashmrtn): Remove this since the same cache can do IDs or locations. func (suite *ConfiguredFolderCacheUnitSuite) TestLookupCachedFolderCachesPaths_useID() { ctx, flush := tester.NewContext() defer flush() @@ -439,6 +636,9 @@ func (suite *ConfiguredFolderCacheUnitSuite) TestLookupCachedFolderCachesPaths_u t := suite.T() c := suite.containersWithID[len(suite.containersWithID)-1] + err := suite.fcWithID.populatePaths(ctx, fault.New(true)) + require.NoError(t, err, clues.ToCore(err)) + p, l, err := suite.fcWithID.IDToPath(ctx, c.id) require.NoError(t, err, clues.ToCore(err)) assert.Equal(t, c.expectedPath, p.String()) @@ -457,12 +657,21 @@ func (suite *ConfiguredFolderCacheUnitSuite) TestLookupCachedFolderErrorsParentN defer flush() t := suite.T() - last := suite.allContainers[len(suite.allContainers)-1] almostLast := suite.allContainers[len(suite.allContainers)-2] delete(suite.fc.cache, almostLast.id) - _, _, err := suite.fc.IDToPath(ctx, last.id) + err := suite.fc.populatePaths(ctx, fault.New(true)) + assert.Error(t, err, clues.ToCore(err)) +} + +func (suite *ConfiguredFolderCacheUnitSuite) TestLookupCachedFolder_Errors_PathsNotBuilt() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + + _, _, err := suite.fc.IDToPath(ctx, suite.allContainers[len(suite.allContainers)-1].id) assert.Error(t, err, clues.ToCore(err)) } diff --git a/src/internal/connector/exchange/data_collections_test.go b/src/internal/connector/exchange/data_collections_test.go index ef34de5ff..557df264f 100644 --- a/src/internal/connector/exchange/data_collections_test.go +++ b/src/internal/connector/exchange/data_collections_test.go @@ -597,7 +597,7 @@ func (suite *DataCollectionsIntegrationSuite) TestEventsSerializationRegression( bdayID string ) - fn := func(gcf graph.CacheFolder) error { + fn := func(gcf graph.CachedContainer) error { if ptr.Val(gcf.GetDisplayName()) == DefaultCalendar { calID = ptr.Val(gcf.GetId()) } diff --git a/src/internal/connector/exchange/event_calendar_cache.go b/src/internal/connector/exchange/event_calendar_cache.go index ac8e59548..5e99b4b39 100644 --- a/src/internal/connector/exchange/event_calendar_cache.go +++ b/src/internal/connector/exchange/event_calendar_cache.go @@ -27,7 +27,7 @@ func (ecc *eventCalendarCache) init( ctx context.Context, ) error { if ecc.containerResolver == nil { - ecc.containerResolver = newContainerResolver() + ecc.containerResolver = newContainerResolver(nil) } return ecc.populateEventRoot(ctx) @@ -49,7 +49,7 @@ func (ecc *eventCalendarCache) populateEventRoot(ctx context.Context) error { f, path.Builder{}.Append(ptr.Val(f.GetId())), // storage path path.Builder{}.Append(ptr.Val(f.GetDisplayName()))) // display location - if err := ecc.addFolder(temp); err != nil { + if err := ecc.addFolder(&temp); err != nil { return clues.Wrap(err, "initializing calendar resolver").WithClues(ctx) } @@ -98,7 +98,7 @@ func (ecc *eventCalendarCache) AddToCache(ctx context.Context, f graph.Container path.Builder{}.Append(ptr.Val(f.GetId())), // storage path path.Builder{}.Append(ptr.Val(f.GetDisplayName()))) // display location - if err := ecc.addFolder(temp); err != nil { + if err := ecc.addFolder(&temp); err != nil { return clues.Wrap(err, "adding container").WithClues(ctx) } diff --git a/src/internal/connector/exchange/mail_folder_cache.go b/src/internal/connector/exchange/mail_folder_cache.go index c2630a29a..062f91a23 100644 --- a/src/internal/connector/exchange/mail_folder_cache.go +++ b/src/internal/connector/exchange/mail_folder_cache.go @@ -10,7 +10,29 @@ import ( "github.com/alcionai/corso/src/pkg/path" ) -var _ graph.ContainerResolver = &mailFolderCache{} +var ( + _ graph.ContainerResolver = &mailFolderCache{} + _ containerRefresher = &mailRefresher{} +) + +type mailRefresher struct { + getter containerGetter + userID string +} + +func (r *mailRefresher) refreshContainer( + ctx context.Context, + id string, +) (graph.CachedContainer, error) { + c, err := r.getter.GetContainerByID(ctx, r.userID, id) + if err != nil { + return nil, clues.Stack(err) + } + + f := graph.NewCacheFolder(c, nil, nil) + + return &f, nil +} // mailFolderCache struct used to improve lookup of directories within exchange.Mail // cache map of cachedContainers where the key = M365ID @@ -29,7 +51,10 @@ func (mc *mailFolderCache) init( ctx context.Context, ) error { if mc.containerResolver == nil { - mc.containerResolver = newContainerResolver() + mc.containerResolver = newContainerResolver(&mailRefresher{ + userID: mc.userID, + getter: mc.getter, + }) } return mc.populateMailRoot(ctx) @@ -52,7 +77,7 @@ func (mc *mailFolderCache) populateMailRoot(ctx context.Context) error { // the user doesn't see in the regular UI for Exchange. path.Builder{}.Append(), // path of IDs path.Builder{}.Append()) // display location - if err := mc.addFolder(temp); err != nil { + if err := mc.addFolder(&temp); err != nil { return clues.Wrap(err, "adding resolver dir").WithClues(ctx) } diff --git a/src/pkg/services/m365/api/contacts.go b/src/pkg/services/m365/api/contacts.go index b958e2ea1..abcc2ab25 100644 --- a/src/pkg/services/m365/api/contacts.go +++ b/src/pkg/services/m365/api/contacts.go @@ -118,7 +118,7 @@ func (c Contacts) GetContainerByID( func (c Contacts) EnumerateContainers( ctx context.Context, userID, baseDirID string, - fn func(graph.CacheFolder) error, + fn func(graph.CachedContainer) error, errs *fault.Bus, ) error { service, err := c.Service() @@ -166,7 +166,7 @@ func (c Contacts) EnumerateContainers( "container_display_name", ptr.Val(fold.GetDisplayName())) temp := graph.NewCacheFolder(fold, nil, nil) - if err := fn(temp); err != nil { + if err := fn(&temp); err != nil { errs.AddRecoverable(graph.Stack(fctx, err).Label(fault.LabelForceNoBackupCreation)) continue } diff --git a/src/pkg/services/m365/api/events.go b/src/pkg/services/m365/api/events.go index 5cccdc49b..9700e9ffa 100644 --- a/src/pkg/services/m365/api/events.go +++ b/src/pkg/services/m365/api/events.go @@ -192,7 +192,7 @@ func (c Events) GetItem( func (c Events) EnumerateContainers( ctx context.Context, userID, baseDirID string, - fn func(graph.CacheFolder) error, + fn func(graph.CachedContainer) error, errs *fault.Bus, ) error { service, err := c.Service() @@ -239,7 +239,7 @@ func (c Events) EnumerateContainers( cd, path.Builder{}.Append(ptr.Val(cd.GetId())), // storage path path.Builder{}.Append(ptr.Val(cd.GetDisplayName()))) // display location - if err := fn(temp); err != nil { + if err := fn(&temp); err != nil { errs.AddRecoverable(graph.Stack(fctx, err).Label(fault.LabelForceNoBackupCreation)) continue } diff --git a/src/pkg/services/m365/api/mail.go b/src/pkg/services/m365/api/mail.go index c951027be..5fe9e6d4f 100644 --- a/src/pkg/services/m365/api/mail.go +++ b/src/pkg/services/m365/api/mail.go @@ -309,7 +309,7 @@ func (p *mailFolderPager) valuesIn(pl api.PageLinker) ([]models.MailFolderable, func (c Mail) EnumerateContainers( ctx context.Context, userID, baseDirID string, - fn func(graph.CacheFolder) error, + fn func(graph.CachedContainer) error, errs *fault.Bus, ) error { service, err := c.Service() @@ -347,7 +347,7 @@ func (c Mail) EnumerateContainers( "container_name", ptr.Val(v.GetDisplayName())) temp := graph.NewCacheFolder(v, nil, nil) - if err := fn(temp); err != nil { + if err := fn(&temp); err != nil { errs.AddRecoverable(graph.Stack(fctx, err).Label(fault.LabelForceNoBackupCreation)) continue } From a3f4d749446140f20d9fe2ab5791a5494fe46a3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 May 2023 01:00:29 +0000 Subject: [PATCH 09/13] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20github.com/mi?= =?UTF-8?q?crosoftgraph/msgraph-sdk-go=20from=201.1.0=20to=201.2.0=20in=20?= =?UTF-8?q?/src=20(#3429)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/microsoftgraph/msgraph-sdk-go](https://github.com/microsoftgraph/msgraph-sdk-go) from 1.1.0 to 1.2.0.
    Changelog

    Sourced from github.com/microsoftgraph/msgraph-sdk-go's changelog.

    [1.2.0]- 2023-05-16

    Changed

    • Weekly generation.
    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/microsoftgraph/msgraph-sdk-go&package-manager=go_modules&previous-version=1.1.0&new-version=1.2.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) You can trigger a rebase of this PR by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --- src/go.mod | 2 +- src/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/go.mod b/src/go.mod index 008349b5d..1a9c3d561 100644 --- a/src/go.mod +++ b/src/go.mod @@ -19,7 +19,7 @@ require ( github.com/microsoft/kiota-http-go v1.0.0 github.com/microsoft/kiota-serialization-form-go v1.0.0 github.com/microsoft/kiota-serialization-json-go v1.0.0 - github.com/microsoftgraph/msgraph-sdk-go v1.1.0 + github.com/microsoftgraph/msgraph-sdk-go v1.2.0 github.com/microsoftgraph/msgraph-sdk-go-core v1.0.0 github.com/pkg/errors v0.9.1 github.com/rudderlabs/analytics-go v3.3.3+incompatible diff --git a/src/go.sum b/src/go.sum index edca9200f..3b46687fb 100644 --- a/src/go.sum +++ b/src/go.sum @@ -285,8 +285,8 @@ github.com/microsoft/kiota-serialization-json-go v1.0.0 h1:snT+SwS/R4CMjkmj7mjCH github.com/microsoft/kiota-serialization-json-go v1.0.0/go.mod h1:psfgIfqWm/9P1JAdl2cxHHIg9SdEtYHOetfDLIQ5/dw= github.com/microsoft/kiota-serialization-text-go v1.0.0 h1:XOaRhAXy+g8ZVpcq7x7a0jlETWnWrEum0RhmbYrTFnA= github.com/microsoft/kiota-serialization-text-go v1.0.0/go.mod h1:sM1/C6ecnQ7IquQOGUrUldaO5wj+9+v7G2W3sQ3fy6M= -github.com/microsoftgraph/msgraph-sdk-go v1.1.0 h1:NtFsFVIt8lpXcTlRbLG1WuCOTzltzS5j+U8Fecqdnr4= -github.com/microsoftgraph/msgraph-sdk-go v1.1.0/go.mod h1:NIk9kSn7lQ5Hnhhn3FM4NrJWz54JfDHD0JvhJZky27g= +github.com/microsoftgraph/msgraph-sdk-go v1.2.0 h1:SZGcs6aoxUt5mSSNlgKe7j4N2BhKN1w2DzYBEMLtMCc= +github.com/microsoftgraph/msgraph-sdk-go v1.2.0/go.mod h1:NIk9kSn7lQ5Hnhhn3FM4NrJWz54JfDHD0JvhJZky27g= github.com/microsoftgraph/msgraph-sdk-go-core v1.0.0 h1:7NWTfyXvOjoizW7PmxNp3+8wCKPgpODs/D1cUZ3fkAY= github.com/microsoftgraph/msgraph-sdk-go-core v1.0.0/go.mod h1:tQb4q3YMIj2dWhhXhQSJ4ELpol931ANKzHSYK5kX1qE= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= From f28c6e53d44208661a82a7810ba6c3e1a0003f1f Mon Sep 17 00:00:00 2001 From: ashmrtn Date: Fri, 19 May 2023 18:41:37 -0700 Subject: [PATCH 10/13] Add tests for older versions of backup details data (#3454) Add tests for older backup details versions including things like: * SharePoint using OneDriveItem type * not having LocationRef * not having ItemRef * folder names in RepoRef * file names in RepoRef Recommend viewing with ignore whitespace changes --- #### Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No #### Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [x] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup #### Issue(s) * #3269 #### Test Plan - [ ] :muscle: Manual - [x] :zap: Unit test - [ ] :green_heart: E2E --- src/cli/backup/exchange_test.go | 35 +- src/cli/backup/onedrive_test.go | 35 +- src/cli/backup/sharepoint_test.go | 35 +- src/cli/utils/testdata/opts.go | 1022 ++++++++++++------ src/pkg/backup/details/testdata/testdata.go | 1030 +++++++++++++++---- src/pkg/selectors/selectors_reduce_test.go | 241 ++++- 6 files changed, 1808 insertions(+), 590 deletions(-) diff --git a/src/cli/backup/exchange_test.go b/src/cli/backup/exchange_test.go index d8d4f9e68..dd3d12766 100644 --- a/src/cli/backup/exchange_test.go +++ b/src/cli/backup/exchange_test.go @@ -1,6 +1,7 @@ package backup import ( + "fmt" "testing" "github.com/alcionai/clues" @@ -13,6 +14,8 @@ import ( "github.com/alcionai/corso/src/cli/utils" "github.com/alcionai/corso/src/cli/utils/testdata" "github.com/alcionai/corso/src/internal/tester" + "github.com/alcionai/corso/src/internal/version" + dtd "github.com/alcionai/corso/src/pkg/backup/details/testdata" ) type ExchangeUnitSuite struct { @@ -275,18 +278,26 @@ func (suite *ExchangeUnitSuite) TestExchangeBackupDetailsSelectors() { ctx, flush := tester.NewContext() defer flush() - for _, test := range testdata.ExchangeOptionDetailLookups { - suite.Run(test.Name, func() { - t := suite.T() + for v := 0; v <= version.Backup; v++ { + suite.Run(fmt.Sprintf("version%d", v), func() { + for _, test := range testdata.ExchangeOptionDetailLookups { + suite.Run(test.Name, func() { + t := suite.T() - output, err := runDetailsExchangeCmd( - ctx, - test.BackupGetter, - "backup-ID", - test.Opts, - false) - assert.NoError(t, err, clues.ToCore(err)) - assert.ElementsMatch(t, test.Expected, output.Entries) + bg := testdata.VersionedBackupGetter{ + Details: dtd.GetDetailsSetForVersion(t, v), + } + + output, err := runDetailsExchangeCmd( + ctx, + bg, + "backup-ID", + test.Opts(t, v), + false) + assert.NoError(t, err, clues.ToCore(err)) + assert.ElementsMatch(t, test.Expected(t, v), output.Entries) + }) + } }) } } @@ -303,7 +314,7 @@ func (suite *ExchangeUnitSuite) TestExchangeBackupDetailsSelectorsBadFormats() { ctx, test.BackupGetter, "backup-ID", - test.Opts, + test.Opts(t, version.Backup), false) assert.Error(t, err, clues.ToCore(err)) assert.Empty(t, output) diff --git a/src/cli/backup/onedrive_test.go b/src/cli/backup/onedrive_test.go index dd9d6586b..27720fa74 100644 --- a/src/cli/backup/onedrive_test.go +++ b/src/cli/backup/onedrive_test.go @@ -1,6 +1,7 @@ package backup import ( + "fmt" "testing" "github.com/alcionai/clues" @@ -13,6 +14,8 @@ import ( "github.com/alcionai/corso/src/cli/utils" "github.com/alcionai/corso/src/cli/utils/testdata" "github.com/alcionai/corso/src/internal/tester" + "github.com/alcionai/corso/src/internal/version" + dtd "github.com/alcionai/corso/src/pkg/backup/details/testdata" ) type OneDriveUnitSuite struct { @@ -137,18 +140,26 @@ func (suite *OneDriveUnitSuite) TestOneDriveBackupDetailsSelectors() { ctx, flush := tester.NewContext() defer flush() - for _, test := range testdata.OneDriveOptionDetailLookups { - suite.Run(test.Name, func() { - t := suite.T() + for v := 0; v <= version.Backup; v++ { + suite.Run(fmt.Sprintf("version%d", v), func() { + for _, test := range testdata.OneDriveOptionDetailLookups { + suite.Run(test.Name, func() { + t := suite.T() - output, err := runDetailsOneDriveCmd( - ctx, - test.BackupGetter, - "backup-ID", - test.Opts, - false) - assert.NoError(t, err, clues.ToCore(err)) - assert.ElementsMatch(t, test.Expected, output.Entries) + bg := testdata.VersionedBackupGetter{ + Details: dtd.GetDetailsSetForVersion(t, v), + } + + output, err := runDetailsOneDriveCmd( + ctx, + bg, + "backup-ID", + test.Opts(t, v), + false) + assert.NoError(t, err, clues.ToCore(err)) + assert.ElementsMatch(t, test.Expected(t, v), output.Entries) + }) + } }) } } @@ -165,7 +176,7 @@ func (suite *OneDriveUnitSuite) TestOneDriveBackupDetailsSelectorsBadFormats() { ctx, test.BackupGetter, "backup-ID", - test.Opts, + test.Opts(t, version.Backup), false) assert.Error(t, err, clues.ToCore(err)) assert.Empty(t, output) diff --git a/src/cli/backup/sharepoint_test.go b/src/cli/backup/sharepoint_test.go index 70b132897..ba355da82 100644 --- a/src/cli/backup/sharepoint_test.go +++ b/src/cli/backup/sharepoint_test.go @@ -1,6 +1,7 @@ package backup import ( + "fmt" "testing" "github.com/alcionai/clues" @@ -14,6 +15,8 @@ import ( "github.com/alcionai/corso/src/cli/utils/testdata" "github.com/alcionai/corso/src/internal/common/idname" "github.com/alcionai/corso/src/internal/tester" + "github.com/alcionai/corso/src/internal/version" + dtd "github.com/alcionai/corso/src/pkg/backup/details/testdata" "github.com/alcionai/corso/src/pkg/selectors" ) @@ -256,18 +259,26 @@ func (suite *SharePointUnitSuite) TestSharePointBackupDetailsSelectors() { ctx, flush := tester.NewContext() defer flush() - for _, test := range testdata.SharePointOptionDetailLookups { - suite.Run(test.Name, func() { - t := suite.T() + for v := 0; v <= version.Backup; v++ { + suite.Run(fmt.Sprintf("version%d", v), func() { + for _, test := range testdata.SharePointOptionDetailLookups { + suite.Run(test.Name, func() { + t := suite.T() - output, err := runDetailsSharePointCmd( - ctx, - test.BackupGetter, - "backup-ID", - test.Opts, - false) - assert.NoError(t, err, clues.ToCore(err)) - assert.ElementsMatch(t, test.Expected, output.Entries) + bg := testdata.VersionedBackupGetter{ + Details: dtd.GetDetailsSetForVersion(t, v), + } + + output, err := runDetailsSharePointCmd( + ctx, + bg, + "backup-ID", + test.Opts(t, v), + false) + assert.NoError(t, err, clues.ToCore(err)) + assert.ElementsMatch(t, test.Expected(t, v), output.Entries) + }) + } }) } } @@ -284,7 +295,7 @@ func (suite *SharePointUnitSuite) TestSharePointBackupDetailsSelectorsBadFormats ctx, test.BackupGetter, "backup-ID", - test.Opts, + test.Opts(t, version.Backup), false) assert.Error(t, err, clues.ToCore(err)) assert.Empty(t, output) diff --git a/src/cli/utils/testdata/opts.go b/src/cli/utils/testdata/opts.go index 8bbb35a58..614434c11 100644 --- a/src/cli/utils/testdata/opts.go +++ b/src/cli/utils/testdata/opts.go @@ -2,6 +2,7 @@ package testdata import ( "context" + "testing" "time" "github.com/alcionai/clues" @@ -13,15 +14,16 @@ import ( "github.com/alcionai/corso/src/pkg/backup/details/testdata" "github.com/alcionai/corso/src/pkg/fault" ftd "github.com/alcionai/corso/src/pkg/fault/testdata" + "github.com/alcionai/corso/src/pkg/path" "github.com/alcionai/corso/src/pkg/selectors" "github.com/alcionai/corso/src/pkg/store" ) type ExchangeOptionsTest struct { Name string - Opts utils.ExchangeOpts + Opts func(t *testing.T, wantedVersion int) utils.ExchangeOpts BackupGetter *MockBackupGetter - Expected []details.Entry + Expected func(t *testing.T, wantedVersion int) []details.Entry } var ( @@ -32,92 +34,112 @@ var ( BadExchangeOptionsFormats = []ExchangeOptionsTest{ { Name: "BadEmailReceiveAfter", - Opts: utils.ExchangeOpts{ - EmailReceivedAfter: "foo", - Populated: utils.PopulatedFlags{ - utils.EmailReceivedAfterFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailReceivedAfter: "foo", + Populated: utils.PopulatedFlags{ + utils.EmailReceivedAfterFN: struct{}{}, + }, + } }, }, { Name: "EmptyEmailReceiveAfter", - Opts: utils.ExchangeOpts{ - EmailReceivedAfter: "", - Populated: utils.PopulatedFlags{ - utils.EmailReceivedAfterFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailReceivedAfter: "", + Populated: utils.PopulatedFlags{ + utils.EmailReceivedAfterFN: struct{}{}, + }, + } }, }, { Name: "BadEmailReceiveBefore", - Opts: utils.ExchangeOpts{ - EmailReceivedBefore: "foo", - Populated: utils.PopulatedFlags{ - utils.EmailReceivedBeforeFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailReceivedBefore: "foo", + Populated: utils.PopulatedFlags{ + utils.EmailReceivedBeforeFN: struct{}{}, + }, + } }, }, { Name: "EmptyEmailReceiveBefore", - Opts: utils.ExchangeOpts{ - EmailReceivedBefore: "", - Populated: utils.PopulatedFlags{ - utils.EmailReceivedBeforeFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailReceivedBefore: "", + Populated: utils.PopulatedFlags{ + utils.EmailReceivedBeforeFN: struct{}{}, + }, + } }, }, { Name: "BadEventRecurs", - Opts: utils.ExchangeOpts{ - EventRecurs: "foo", - Populated: utils.PopulatedFlags{ - utils.EventRecursFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EventRecurs: "foo", + Populated: utils.PopulatedFlags{ + utils.EventRecursFN: struct{}{}, + }, + } }, }, { Name: "EmptyEventRecurs", - Opts: utils.ExchangeOpts{ - EventRecurs: "", - Populated: utils.PopulatedFlags{ - utils.EventRecursFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EventRecurs: "", + Populated: utils.PopulatedFlags{ + utils.EventRecursFN: struct{}{}, + }, + } }, }, { Name: "BadEventStartsAfter", - Opts: utils.ExchangeOpts{ - EventStartsAfter: "foo", - Populated: utils.PopulatedFlags{ - utils.EventStartsAfterFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EventStartsAfter: "foo", + Populated: utils.PopulatedFlags{ + utils.EventStartsAfterFN: struct{}{}, + }, + } }, }, { Name: "EmptyEventStartsAfter", - Opts: utils.ExchangeOpts{ - EventStartsAfter: "", - Populated: utils.PopulatedFlags{ - utils.EventStartsAfterFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EventStartsAfter: "", + Populated: utils.PopulatedFlags{ + utils.EventStartsAfterFN: struct{}{}, + }, + } }, }, { Name: "BadEventStartsBefore", - Opts: utils.ExchangeOpts{ - EventStartsBefore: "foo", - Populated: utils.PopulatedFlags{ - utils.EventStartsBeforeFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EventStartsBefore: "foo", + Populated: utils.PopulatedFlags{ + utils.EventStartsBeforeFN: struct{}{}, + }, + } }, }, { Name: "EmptyEventStartsBefore", - Opts: utils.ExchangeOpts{ - EventStartsBefore: "", - Populated: utils.PopulatedFlags{ - utils.EventStartsBeforeFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EventStartsBefore: "", + Populated: utils.PopulatedFlags{ + utils.EventStartsBeforeFN: struct{}{}, + }, + } }, }, } @@ -128,130 +150,274 @@ var ( // configured to return the full dataset listed in selectors/testdata. ExchangeOptionDetailLookups = []ExchangeOptionsTest{ { - Name: "Emails", - Expected: testdata.ExchangeEmailItems, - Opts: utils.ExchangeOpts{ - Email: selectors.Any(), + Name: "Emails", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + Email: selectors.Any(), + } }, }, { - Name: "EmailsFolderPrefixMatch", - Expected: testdata.ExchangeEmailItems, - Opts: utils.ExchangeOpts{ - EmailFolder: []string{testdata.ExchangeEmailInboxPath.FolderLocation()}, + Name: "EmailsFolderPrefixMatch", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailFolder: []string{testdata.ExchangeEmailInboxPath.FolderLocation()}, + } }, }, { - Name: "EmailsFolderPrefixMatchTrailingSlash", - Expected: testdata.ExchangeEmailItems, - Opts: utils.ExchangeOpts{ - EmailFolder: []string{testdata.ExchangeEmailInboxPath.FolderLocation() + "/"}, + Name: "EmailsFolderPrefixMatchTrailingSlash", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailFolder: []string{testdata.ExchangeEmailInboxPath.FolderLocation() + "/"}, + } }, }, { Name: "EmailsFolderWithSlashPrefixMatch", - Expected: []details.Entry{ - testdata.ExchangeEmailItems[1], - testdata.ExchangeEmailItems[2], + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + 1, 2) }, - Opts: utils.ExchangeOpts{ - EmailFolder: []string{testdata.ExchangeEmailBasePath2.FolderLocation()}, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailFolder: []string{testdata.ExchangeEmailBasePath2.FolderLocation()}, + } }, }, { Name: "EmailsFolderWithSlashPrefixMatchTrailingSlash", - Expected: []details.Entry{ - testdata.ExchangeEmailItems[1], - testdata.ExchangeEmailItems[2], + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + 1, 2) }, - Opts: utils.ExchangeOpts{ - EmailFolder: []string{testdata.ExchangeEmailBasePath2.FolderLocation() + "/"}, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailFolder: []string{testdata.ExchangeEmailBasePath2.FolderLocation() + "/"}, + } }, }, { Name: "EmailsBySubject", - Expected: []details.Entry{ - testdata.ExchangeEmailItems[0], - testdata.ExchangeEmailItems[1], + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + 0, 1) }, - Opts: utils.ExchangeOpts{ - EmailSender: "a-person", + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailSender: "a-person", + } }, }, { Name: "AllExchange", - Expected: append( - append( + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{} + }, + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return append( append( - []details.Entry{}, - testdata.ExchangeEmailItems..., - ), - testdata.ExchangeContactsItems..., - ), - testdata.ExchangeEventsItems..., - ), - }, - { - Name: "MailReceivedTime", - Expected: []details.Entry{testdata.ExchangeEmailItems[0]}, - Opts: utils.ExchangeOpts{ - EmailReceivedBefore: dttm.Format(testdata.Time1.Add(time.Second)), + testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + -1), + testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EventsCategory, + wantedVersion, + -1)...), + testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.ContactsCategory, + wantedVersion, + -1)...) }, }, { - Name: "MailShortRef", - Expected: []details.Entry{testdata.ExchangeEmailItems[0]}, - Opts: utils.ExchangeOpts{ - Email: []string{testdata.ExchangeEmailItemPath1.RR.ShortRef()}, + Name: "MailReceivedTime", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + 0) + }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailReceivedBefore: dttm.Format(testdata.Time1.Add(time.Second)), + } + }, + }, + { + Name: "MailShortRef", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + 0) + }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + deets := testdata.GetDeetsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion) + + return utils.ExchangeOpts{ + Email: []string{deets[0].ShortRef}, + } }, }, { Name: "BadMailItemRef", // no matches are expected, since exchange ItemRefs // are not matched when using the CLI's selectors. - Expected: []details.Entry{}, - Opts: utils.ExchangeOpts{ - Email: []string{testdata.ExchangeEmailItems[0].ItemRef}, + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return []details.Entry{} + }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + deets := testdata.GetDeetsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion) + + return utils.ExchangeOpts{ + Email: []string{deets[0].ItemRef}, + } }, }, { Name: "MultipleMailShortRef", - Expected: []details.Entry{ - testdata.ExchangeEmailItems[0], - testdata.ExchangeEmailItems[1], + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + 0, 1) }, - Opts: utils.ExchangeOpts{ - Email: []string{ - testdata.ExchangeEmailItemPath1.RR.ShortRef(), - testdata.ExchangeEmailItemPath2.RR.ShortRef(), - }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + deets := testdata.GetDeetsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion) + + return utils.ExchangeOpts{ + Email: []string{ + deets[0].ShortRef, + deets[1].ShortRef, + }, + } }, }, { - Name: "AllEventsAndMailWithSubject", - Expected: []details.Entry{testdata.ExchangeEmailItems[0]}, - Opts: utils.ExchangeOpts{ - EmailSubject: "foo", - Event: selectors.Any(), + Name: "AllEventsAndMailWithSubject", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + 0) + }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailSubject: "foo", + Event: selectors.Any(), + } }, }, { - Name: "EventsAndMailWithSubject", - Expected: []details.Entry{}, - Opts: utils.ExchangeOpts{ - EmailSubject: "foo", - EventSubject: "foo", + Name: "EventsAndMailWithSubject", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return []details.Entry{} + }, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + return utils.ExchangeOpts{ + EmailSubject: "foo", + EventSubject: "foo", + } }, }, { Name: "EventsAndMailByShortRef", - Expected: []details.Entry{ - testdata.ExchangeEmailItems[0], - testdata.ExchangeEventsItems[0], + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return append( + testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion, + 0), + testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EventsCategory, + wantedVersion, + 0)...) }, - Opts: utils.ExchangeOpts{ - Email: []string{testdata.ExchangeEmailItemPath1.RR.ShortRef()}, - Event: []string{testdata.ExchangeEventsItemPath1.RR.ShortRef()}, + Opts: func(t *testing.T, wantedVersion int) utils.ExchangeOpts { + emailDeets := testdata.GetDeetsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantedVersion) + + eventDeets := testdata.GetDeetsForVersion( + t, + path.ExchangeService, + path.EventsCategory, + wantedVersion) + + return utils.ExchangeOpts{ + Email: []string{emailDeets[0].ShortRef}, + Event: []string{eventDeets[0].ShortRef}, + } }, }, } @@ -259,9 +425,9 @@ var ( type OneDriveOptionsTest struct { Name string - Opts utils.OneDriveOpts + Opts func(t *testing.T, wantedVersion int) utils.OneDriveOpts BackupGetter *MockBackupGetter - Expected []details.Entry + Expected func(t *testing.T, wantedVersion int) []details.Entry } var ( @@ -271,75 +437,91 @@ var ( BadOneDriveOptionsFormats = []OneDriveOptionsTest{ { Name: "BadFileCreatedAfter", - Opts: utils.OneDriveOpts{ - Users: selectors.Any(), - FileCreatedAfter: "foo", - Populated: utils.PopulatedFlags{ - utils.FileCreatedAfterFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + Users: selectors.Any(), + FileCreatedAfter: "foo", + Populated: utils.PopulatedFlags{ + utils.FileCreatedAfterFN: struct{}{}, + }, + } }, }, { Name: "EmptyFileCreatedAfter", - Opts: utils.OneDriveOpts{ - FileCreatedAfter: "", - Populated: utils.PopulatedFlags{ - utils.FileCreatedAfterFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FileCreatedAfter: "", + Populated: utils.PopulatedFlags{ + utils.FileCreatedAfterFN: struct{}{}, + }, + } }, }, { Name: "BadFileCreatedBefore", - Opts: utils.OneDriveOpts{ - FileCreatedBefore: "foo", - Populated: utils.PopulatedFlags{ - utils.FileCreatedBeforeFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FileCreatedBefore: "foo", + Populated: utils.PopulatedFlags{ + utils.FileCreatedBeforeFN: struct{}{}, + }, + } }, }, { Name: "EmptyFileCreatedBefore", - Opts: utils.OneDriveOpts{ - FileCreatedBefore: "", - Populated: utils.PopulatedFlags{ - utils.FileCreatedBeforeFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FileCreatedBefore: "", + Populated: utils.PopulatedFlags{ + utils.FileCreatedBeforeFN: struct{}{}, + }, + } }, }, { Name: "BadFileModifiedAfter", - Opts: utils.OneDriveOpts{ - FileModifiedAfter: "foo", - Populated: utils.PopulatedFlags{ - utils.FileModifiedAfterFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FileModifiedAfter: "foo", + Populated: utils.PopulatedFlags{ + utils.FileModifiedAfterFN: struct{}{}, + }, + } }, }, { Name: "EmptyFileModifiedAfter", - Opts: utils.OneDriveOpts{ - FileModifiedAfter: "", - Populated: utils.PopulatedFlags{ - utils.FileModifiedAfterFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FileModifiedAfter: "", + Populated: utils.PopulatedFlags{ + utils.FileModifiedAfterFN: struct{}{}, + }, + } }, }, { Name: "BadFileModifiedBefore", - Opts: utils.OneDriveOpts{ - FileModifiedBefore: "foo", - Populated: utils.PopulatedFlags{ - utils.FileModifiedBeforeFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FileModifiedBefore: "foo", + Populated: utils.PopulatedFlags{ + utils.FileModifiedBeforeFN: struct{}{}, + }, + } }, }, { Name: "EmptyFileModifiedBefore", - Opts: utils.OneDriveOpts{ - FileModifiedBefore: "", - Populated: utils.PopulatedFlags{ - utils.FileModifiedBeforeFN: struct{}{}, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FileModifiedBefore: "", + Populated: utils.PopulatedFlags{ + utils.FileModifiedBeforeFN: struct{}{}, + }, + } }, }, } @@ -350,96 +532,203 @@ var ( // configured to return the full dataset listed in selectors/testdata. OneDriveOptionDetailLookups = []OneDriveOptionsTest{ { - Name: "AllFiles", - Expected: testdata.OneDriveItems, - Opts: utils.OneDriveOpts{ - FolderPath: selectors.Any(), + Name: "AllFiles", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FolderPath: selectors.Any(), + } }, }, { - Name: "FilesWithSingleSlash", - Expected: testdata.OneDriveItems, - Opts: utils.OneDriveOpts{ - FolderPath: []string{"/"}, + Name: "FilesWithSingleSlash", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FolderPath: []string{"/"}, + } }, }, { - Name: "FolderPrefixMatch", - Expected: testdata.OneDriveItems, - Opts: utils.OneDriveOpts{ - FolderPath: []string{testdata.OneDriveFolderFolder}, + Name: "FolderPrefixMatch", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FolderPath: []string{testdata.OneDriveFolderFolder}, + } }, }, { - Name: "FolderPrefixMatchTrailingSlash", - Expected: testdata.OneDriveItems, - Opts: utils.OneDriveOpts{ - FolderPath: []string{testdata.OneDriveFolderFolder + "/"}, + Name: "FolderPrefixMatchTrailingSlash", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FolderPath: []string{testdata.OneDriveFolderFolder + "/"}, + } }, }, { - Name: "FolderPrefixMatchTrailingSlash", - Expected: testdata.OneDriveItems, - Opts: utils.OneDriveOpts{ - FolderPath: []string{testdata.OneDriveFolderFolder + "/"}, + Name: "FolderPrefixMatchTrailingSlash", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FolderPath: []string{testdata.OneDriveFolderFolder + "/"}, + } }, }, { - Name: "FolderRepoRefMatchesNothing", - Expected: []details.Entry{}, - Opts: utils.OneDriveOpts{ - FolderPath: []string{testdata.OneDriveFolderPath.RR.Folder(true)}, + Name: "FolderRepoRefMatchesNothing", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return []details.Entry{} + }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FolderPath: []string{testdata.OneDriveFolderPath.RR.Folder(true)}, + } }, }, { Name: "ShortRef", - Expected: []details.Entry{ - testdata.OneDriveItems[0], - testdata.OneDriveItems[1], + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion, + 0, 1) }, - Opts: utils.OneDriveOpts{ - FileName: []string{ - testdata.OneDriveItems[0].ShortRef, - testdata.OneDriveItems[1].ShortRef, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + deets := testdata.GetDeetsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion) + + return utils.OneDriveOpts{ + FileName: []string{ + deets[0].ShortRef, + deets[1].ShortRef, + }, + } }, }, { - Name: "SingleItem", - Expected: []details.Entry{testdata.OneDriveItems[0]}, - Opts: utils.OneDriveOpts{ - FileName: []string{ - testdata.OneDriveItems[0].OneDrive.ItemName, - }, + Name: "SingleItem", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion, + 0) + }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + deets := testdata.GetDeetsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion) + + return utils.OneDriveOpts{ + FileName: []string{ + deets[0].OneDrive.ItemName, + }, + } }, }, { Name: "MultipleItems", - Expected: []details.Entry{ - testdata.OneDriveItems[0], - testdata.OneDriveItems[1], + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion, + 0, 1) }, - Opts: utils.OneDriveOpts{ - FileName: []string{ - testdata.OneDriveItems[0].OneDrive.ItemName, - testdata.OneDriveItems[1].OneDrive.ItemName, - }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + deets := testdata.GetDeetsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion) + + return utils.OneDriveOpts{ + FileName: []string{ + deets[0].OneDrive.ItemName, + deets[1].OneDrive.ItemName, + }, + } }, }, { - Name: "ItemRefMatchesNothing", - Expected: []details.Entry{}, - Opts: utils.OneDriveOpts{ - FileName: []string{ - testdata.OneDriveItems[0].ItemRef, - }, + Name: "ItemRefMatchesNothing", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return []details.Entry{} + }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + deets := testdata.GetDeetsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion) + + return utils.OneDriveOpts{ + FileName: []string{ + deets[0].ItemRef, + }, + } }, }, { - Name: "CreatedBefore", - Expected: []details.Entry{testdata.OneDriveItems[1]}, - Opts: utils.OneDriveOpts{ - FileCreatedBefore: dttm.Format(testdata.Time1.Add(time.Second)), + Name: "CreatedBefore", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.OneDriveService, + path.FilesCategory, + wantedVersion, + 1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + return utils.OneDriveOpts{ + FileCreatedBefore: dttm.Format(testdata.Time1.Add(time.Second)), + } }, }, } @@ -447,9 +736,9 @@ var ( type SharePointOptionsTest struct { Name string - Opts utils.SharePointOpts + Opts func(t *testing.T, wantedVersion int) utils.SharePointOpts BackupGetter *MockBackupGetter - Expected []details.Entry + Expected func(t *testing.T, wantedVersion int) []details.Entry } var ( @@ -457,24 +746,28 @@ var ( // cause errors about the format of the input flag. Mocks are configured to // allow the system to run if it doesn't throw an error on formatting. BadSharePointOptionsFormats = []SharePointOptionsTest{ - // { - // Name: "BadFileCreatedBefore", - // Opts: utils.OneDriveOpts{ - // FileCreatedBefore: "foo", - // Populated: utils.PopulatedFlags{ - // utils.FileCreatedBeforeFN: struct{}{}, - // }, - // }, - // }, - // { - // Name: "EmptyFileCreatedBefore", - // Opts: utils.OneDriveOpts{ - // FileCreatedBefore: "", - // Populated: utils.PopulatedFlags{ - // utils.FileCreatedBeforeFN: struct{}{}, - // }, - // }, - // }, + //{ + // Name: "BadFileCreatedBefore", + // Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + // return utils.SharePointOpts{ + // FileCreatedBefore: "foo", + // Populated: utils.PopulatedFlags{ + // utils.FileCreatedBeforeFN: struct{}{}, + // }, + // } + // }, + //}, + //{ + // Name: "EmptyFileCreatedBefore", + // Opts: func(t *testing.T, wantedVersion int) utils.OneDriveOpts { + // return utils.SharePointOpts{ + // FileCreatedBefore: "", + // Populated: utils.PopulatedFlags{ + // utils.FileCreatedBeforeFN: struct{}{}, + // }, + // } + // }, + //}, } // SharePointOptionDetailLookups contains flag inputs and expected results for @@ -483,98 +776,205 @@ var ( // configured to return the full dataset listed in selectors/testdata. SharePointOptionDetailLookups = []SharePointOptionsTest{ { - Name: "AllLibraryItems", - Expected: testdata.SharePointLibraryItems, - Opts: utils.SharePointOpts{ - FolderPath: selectors.Any(), + Name: "AllLibraryItems", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + return utils.SharePointOpts{ + FolderPath: selectors.Any(), + } }, }, { - Name: "LibraryItemsWithSingleSlash", - Expected: testdata.SharePointLibraryItems, - Opts: utils.SharePointOpts{ - FolderPath: []string{"/"}, + Name: "LibraryItemsWithSingleSlash", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + return utils.SharePointOpts{ + FolderPath: []string{"/"}, + } }, }, { - Name: "FolderPrefixMatch", - Expected: testdata.SharePointLibraryItems, - Opts: utils.SharePointOpts{ - FolderPath: []string{testdata.SharePointLibraryFolder}, + Name: "FolderPrefixMatch", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + return utils.SharePointOpts{ + FolderPath: []string{testdata.SharePointLibraryFolder}, + } }, }, { - Name: "FolderPrefixMatchTrailingSlash", - Expected: testdata.SharePointLibraryItems, - Opts: utils.SharePointOpts{ - FolderPath: []string{testdata.SharePointLibraryFolder + "/"}, + Name: "FolderPrefixMatchTrailingSlash", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + return utils.SharePointOpts{ + FolderPath: []string{testdata.SharePointLibraryFolder + "/"}, + } }, }, { - Name: "FolderPrefixMatchTrailingSlash", - Expected: testdata.SharePointLibraryItems, - Opts: utils.SharePointOpts{ - FolderPath: []string{testdata.SharePointLibraryFolder + "/"}, + Name: "FolderPrefixMatchTrailingSlash", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion, + -1) + }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + return utils.SharePointOpts{ + FolderPath: []string{testdata.SharePointLibraryFolder + "/"}, + } }, }, { - Name: "FolderRepoRefMatchesNothing", - Expected: []details.Entry{}, - Opts: utils.SharePointOpts{ - FolderPath: []string{testdata.SharePointLibraryPath.RR.Folder(true)}, + Name: "FolderRepoRefMatchesNothing", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return []details.Entry{} + }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + return utils.SharePointOpts{ + FolderPath: []string{testdata.SharePointLibraryPath.RR.Folder(true)}, + } }, }, { Name: "ShortRef", - Expected: []details.Entry{ - testdata.SharePointLibraryItems[0], - testdata.SharePointLibraryItems[1], + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion, + 0, 1) }, - Opts: utils.SharePointOpts{ - FileName: []string{ - testdata.SharePointLibraryItems[0].ShortRef, - testdata.SharePointLibraryItems[1].ShortRef, - }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + deets := testdata.GetDeetsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion) + + return utils.SharePointOpts{ + FileName: []string{ + deets[0].ShortRef, + deets[1].ShortRef, + }, + } }, }, { - Name: "SingleItem", - Expected: []details.Entry{testdata.SharePointLibraryItems[0]}, - Opts: utils.SharePointOpts{ - FileName: []string{ - testdata.SharePointLibraryItems[0].SharePoint.ItemName, - }, + Name: "SingleItem", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion, + 0) + }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + deets := testdata.GetDeetsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion) + + return utils.SharePointOpts{ + FileName: []string{ + deets[0].SharePoint.ItemName, + }, + } }, }, { Name: "MultipleItems", - Expected: []details.Entry{ - testdata.SharePointLibraryItems[0], - testdata.SharePointLibraryItems[1], + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion, + 0, 1) }, - Opts: utils.SharePointOpts{ - FileName: []string{ - testdata.SharePointLibraryItems[0].SharePoint.ItemName, - testdata.SharePointLibraryItems[1].SharePoint.ItemName, - }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + deets := testdata.GetDeetsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion) + + return utils.SharePointOpts{ + FileName: []string{ + deets[0].SharePoint.ItemName, + deets[1].SharePoint.ItemName, + }, + } }, }, { - Name: "ItemRefMatchesNothing", - Expected: []details.Entry{}, - Opts: utils.SharePointOpts{ - FileName: []string{ - testdata.SharePointLibraryItems[0].ItemRef, - }, + Name: "ItemRefMatchesNothing", + Expected: func(t *testing.T, wantedVersion int) []details.Entry { + return []details.Entry{} + }, + Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + deets := testdata.GetDeetsForVersion( + t, + path.SharePointService, + path.LibrariesCategory, + wantedVersion) + + return utils.SharePointOpts{ + FileName: []string{ + deets[0].ItemRef, + }, + } }, }, - // { - // Name: "CreatedBefore", - // Expected: []details.DetailsEntry{testdata.SharePointLibraryItems[1]}, - // Opts: utils.SharePointOpts{ - // FileCreatedBefore: dttm.Format(testdata.Time1.Add(time.Second)), - // }, - // }, + //{ + // Name: "CreatedBefore", + // Expected: func(t *testing.T, wantedVersion int) []details.DetailsEntry { + // return testdata.GetItemsForVersion( + // t, + // path.SharePointService, + // path.LibrariesCategory, + // wantedVersion, + // 1) + // }, + // Opts: func(t *testing.T, wantedVersion int) utils.SharePointOpts { + // return utils.SharePointOpts{ + // FileCreatedBefore: dttm.Format(testdata.Time1.Add(time.Second)), + // } + // }, + //}, } ) @@ -611,10 +1011,6 @@ func (bg *MockBackupGetter) GetBackupDetails( ctx context.Context, backupID string, ) (*details.Details, *backup.Backup, *fault.Bus) { - if bg == nil { - return testdata.GetDetailsSet(), nil, fault.New(true) - } - return nil, nil, fault.New(false).Fail(clues.New("unexpected call to mock")) } @@ -629,3 +1025,15 @@ func (bg *MockBackupGetter) GetBackupErrors( return nil, nil, fault.New(false).Fail(clues.New("unexpected call to mock")) } + +type VersionedBackupGetter struct { + *MockBackupGetter + Details *details.Details +} + +func (bg VersionedBackupGetter) GetBackupDetails( + ctx context.Context, + backupID string, +) (*details.Details, *backup.Backup, *fault.Bus) { + return bg.Details, nil, fault.New(true) +} diff --git a/src/pkg/backup/details/testdata/testdata.go b/src/pkg/backup/details/testdata/testdata.go index 0d98ec7df..a929c141c 100644 --- a/src/pkg/backup/details/testdata/testdata.go +++ b/src/pkg/backup/details/testdata/testdata.go @@ -2,8 +2,13 @@ package testdata import ( "strings" + "testing" "time" + "github.com/stretchr/testify/require" + "golang.org/x/exp/slices" + + "github.com/alcionai/corso/src/internal/version" "github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/path" ) @@ -88,6 +93,28 @@ func (p repoRefAndLocRef) FolderLocation() string { return p.Loc.Append(strings.TrimSuffix(lastElem, folderSuffix)).String() } +// locationAsRepoRef returns a path.Path where the LocationRef is used for the +// folder path instead of the id-based path elements. This is useful for +// generating paths for older versions of Corso. +func (p repoRefAndLocRef) locationAsRepoRef() path.Path { + tmp := p.Loc + if len(p.ItemLocation()) > 0 { + tmp = tmp.Append(p.ItemLocation()) + } + + res, err := tmp.ToDataLayerPath( + p.RR.Tenant(), + p.RR.ResourceOwner(), + p.RR.Service(), + p.RR.Category(), + len(p.ItemLocation()) > 0) + if err != nil { + panic(err) + } + + return res +} + func mustPathRep(ref string, isItem bool) repoRefAndLocRef { res := repoRefAndLocRef{} tmp := mustParsePath(ref, isItem) @@ -145,49 +172,141 @@ var ( ExchangeEmailItemPath2 = ExchangeEmailBasePath2.MustAppend(ItemName2, true) ExchangeEmailItemPath3 = ExchangeEmailBasePath3.MustAppend(ItemName3, true) - ExchangeEmailItems = []details.Entry{ - { - RepoRef: ExchangeEmailItemPath1.RR.String(), - ShortRef: ExchangeEmailItemPath1.RR.ShortRef(), - ParentRef: ExchangeEmailItemPath1.RR.ToBuilder().Dir().ShortRef(), - ItemRef: ExchangeEmailItemPath1.ItemLocation(), - LocationRef: ExchangeEmailItemPath1.Loc.String(), - ItemInfo: details.ItemInfo{ - Exchange: &details.ExchangeInfo{ - ItemType: details.ExchangeMail, - Sender: "a-person", - Subject: "foo", - Received: Time1, + // These all represent the same set of items however, the different versions + // have varying amounts of information. + exchangeEmailItemsByVersion = map[int][]details.Entry{ + version.All8MigrateUserPNToID: { + { + RepoRef: ExchangeEmailItemPath1.RR.String(), + ShortRef: ExchangeEmailItemPath1.RR.ShortRef(), + ParentRef: ExchangeEmailItemPath1.RR.ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeEmailItemPath1.ItemLocation(), + LocationRef: ExchangeEmailItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeMail, + Sender: "a-person", + Subject: "foo", + Received: Time1, + }, + }, + }, + { + RepoRef: ExchangeEmailItemPath2.RR.String(), + ShortRef: ExchangeEmailItemPath2.RR.ShortRef(), + ParentRef: ExchangeEmailItemPath2.RR.ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeEmailItemPath2.ItemLocation(), + LocationRef: ExchangeEmailItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeMail, + Sender: "a-person", + Subject: "bar", + Received: Time2, + }, + }, + }, + { + RepoRef: ExchangeEmailItemPath3.RR.String(), + ShortRef: ExchangeEmailItemPath3.RR.ShortRef(), + ParentRef: ExchangeEmailItemPath3.RR.ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeEmailItemPath3.ItemLocation(), + LocationRef: ExchangeEmailItemPath3.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeMail, + Sender: "another-person", + Subject: "baz", + Received: Time2, + }, }, }, }, - { - RepoRef: ExchangeEmailItemPath2.RR.String(), - ShortRef: ExchangeEmailItemPath2.RR.ShortRef(), - ParentRef: ExchangeEmailItemPath2.RR.ToBuilder().Dir().ShortRef(), - ItemRef: ExchangeEmailItemPath2.ItemLocation(), - LocationRef: ExchangeEmailItemPath2.Loc.String(), - ItemInfo: details.ItemInfo{ - Exchange: &details.ExchangeInfo{ - ItemType: details.ExchangeMail, - Sender: "a-person", - Subject: "bar", - Received: Time2, + version.OneDrive7LocationRef: { + { + RepoRef: ExchangeEmailItemPath1.locationAsRepoRef().String(), + ShortRef: ExchangeEmailItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeEmailItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeEmailItemPath1.ItemLocation(), + LocationRef: ExchangeEmailItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeMail, + Sender: "a-person", + Subject: "foo", + Received: Time1, + }, + }, + }, + { + RepoRef: ExchangeEmailItemPath2.locationAsRepoRef().String(), + ShortRef: ExchangeEmailItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeEmailItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeEmailItemPath2.ItemLocation(), + LocationRef: ExchangeEmailItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeMail, + Sender: "a-person", + Subject: "bar", + Received: Time2, + }, + }, + }, + { + RepoRef: ExchangeEmailItemPath3.locationAsRepoRef().String(), + ShortRef: ExchangeEmailItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeEmailItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeEmailItemPath3.ItemLocation(), + LocationRef: ExchangeEmailItemPath3.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeMail, + Sender: "another-person", + Subject: "baz", + Received: Time2, + }, }, }, }, - { - RepoRef: ExchangeEmailItemPath3.RR.String(), - ShortRef: ExchangeEmailItemPath3.RR.ShortRef(), - ParentRef: ExchangeEmailItemPath3.RR.ToBuilder().Dir().ShortRef(), - ItemRef: ExchangeEmailItemPath3.ItemLocation(), - LocationRef: ExchangeEmailItemPath3.Loc.String(), - ItemInfo: details.ItemInfo{ - Exchange: &details.ExchangeInfo{ - ItemType: details.ExchangeMail, - Sender: "another-person", - Subject: "baz", - Received: Time2, + 0: { + { + RepoRef: ExchangeEmailItemPath1.locationAsRepoRef().String(), + ShortRef: ExchangeEmailItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeEmailItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeMail, + Sender: "a-person", + Subject: "foo", + Received: Time1, + }, + }, + }, + { + RepoRef: ExchangeEmailItemPath2.locationAsRepoRef().String(), + ShortRef: ExchangeEmailItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeEmailItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeMail, + Sender: "a-person", + Subject: "bar", + Received: Time2, + }, + }, + }, + { + RepoRef: ExchangeEmailItemPath3.locationAsRepoRef().String(), + ShortRef: ExchangeEmailItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeEmailItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeMail, + Sender: "another-person", + Subject: "baz", + Received: Time2, + }, }, }, }, @@ -199,30 +318,84 @@ var ( ExchangeContactsItemPath1 = ExchangeContactsBasePath.MustAppend(ItemName1, true) ExchangeContactsItemPath2 = ExchangeContactsBasePath2.MustAppend(ItemName2, true) - ExchangeContactsItems = []details.Entry{ - { - RepoRef: ExchangeContactsItemPath1.RR.String(), - ShortRef: ExchangeContactsItemPath1.RR.ShortRef(), - ParentRef: ExchangeContactsItemPath1.RR.ToBuilder().Dir().ShortRef(), - ItemRef: ExchangeContactsItemPath1.ItemLocation(), - LocationRef: ExchangeContactsItemPath1.Loc.String(), - ItemInfo: details.ItemInfo{ - Exchange: &details.ExchangeInfo{ - ItemType: details.ExchangeContact, - ContactName: "a-person", + exchangeContactsItemsByVersion = map[int][]details.Entry{ + version.All8MigrateUserPNToID: { + { + RepoRef: ExchangeContactsItemPath1.RR.String(), + ShortRef: ExchangeContactsItemPath1.RR.ShortRef(), + ParentRef: ExchangeContactsItemPath1.RR.ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeContactsItemPath1.ItemLocation(), + LocationRef: ExchangeContactsItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeContact, + ContactName: "a-person", + }, + }, + }, + { + RepoRef: ExchangeContactsItemPath2.RR.String(), + ShortRef: ExchangeContactsItemPath2.RR.ShortRef(), + ParentRef: ExchangeContactsItemPath2.RR.ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeContactsItemPath2.ItemLocation(), + LocationRef: ExchangeContactsItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeContact, + ContactName: "another-person", + }, }, }, }, - { - RepoRef: ExchangeContactsItemPath2.RR.String(), - ShortRef: ExchangeContactsItemPath2.RR.ShortRef(), - ParentRef: ExchangeContactsItemPath2.RR.ToBuilder().Dir().ShortRef(), - ItemRef: ExchangeContactsItemPath2.ItemLocation(), - LocationRef: ExchangeContactsItemPath2.Loc.String(), - ItemInfo: details.ItemInfo{ - Exchange: &details.ExchangeInfo{ - ItemType: details.ExchangeContact, - ContactName: "another-person", + version.OneDrive7LocationRef: { + { + RepoRef: ExchangeContactsItemPath1.locationAsRepoRef().String(), + ShortRef: ExchangeContactsItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeContactsItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeContactsItemPath1.ItemLocation(), + LocationRef: ExchangeContactsItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeContact, + ContactName: "a-person", + }, + }, + }, + { + RepoRef: ExchangeContactsItemPath2.locationAsRepoRef().String(), + ShortRef: ExchangeContactsItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeContactsItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeContactsItemPath2.ItemLocation(), + LocationRef: ExchangeContactsItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeContact, + ContactName: "another-person", + }, + }, + }, + }, + 0: { + { + RepoRef: ExchangeContactsItemPath1.locationAsRepoRef().String(), + ShortRef: ExchangeContactsItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeContactsItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeContact, + ContactName: "a-person", + }, + }, + }, + { + RepoRef: ExchangeContactsItemPath2.locationAsRepoRef().String(), + ShortRef: ExchangeContactsItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeContactsItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeContact, + ContactName: "another-person", + }, }, }, }, @@ -233,36 +406,100 @@ var ( ExchangeEventsItemPath1 = ExchangeEventsBasePath.MustAppend(ItemName1, true) ExchangeEventsItemPath2 = ExchangeEventsBasePath2.MustAppend(ItemName2, true) - ExchangeEventsItems = []details.Entry{ - { - RepoRef: ExchangeEventsItemPath1.RR.String(), - ShortRef: ExchangeEventsItemPath1.RR.ShortRef(), - ParentRef: ExchangeEventsItemPath1.RR.ToBuilder().Dir().ShortRef(), - ItemRef: ExchangeEventsItemPath1.ItemLocation(), - LocationRef: ExchangeEventsItemPath1.Loc.String(), - ItemInfo: details.ItemInfo{ - Exchange: &details.ExchangeInfo{ - ItemType: details.ExchangeEvent, - Organizer: "a-person", - Subject: "foo", - EventStart: Time1, - EventRecurs: false, + exchangeEventsItemsByVersion = map[int][]details.Entry{ + version.All8MigrateUserPNToID: { + { + RepoRef: ExchangeEventsItemPath1.RR.String(), + ShortRef: ExchangeEventsItemPath1.RR.ShortRef(), + ParentRef: ExchangeEventsItemPath1.RR.ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeEventsItemPath1.ItemLocation(), + LocationRef: ExchangeEventsItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeEvent, + Organizer: "a-person", + Subject: "foo", + EventStart: Time1, + EventRecurs: false, + }, + }, + }, + { + RepoRef: ExchangeEventsItemPath2.RR.String(), + ShortRef: ExchangeEventsItemPath2.RR.ShortRef(), + ParentRef: ExchangeEventsItemPath2.RR.ToBuilder().Dir().ShortRef(), + ItemRef: ExchangeEventsItemPath2.ItemLocation(), + LocationRef: ExchangeEventsItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeEvent, + Organizer: "a-person", + Subject: "foo", + EventStart: Time2, + EventRecurs: true, + }, }, }, }, - { - RepoRef: ExchangeEventsItemPath2.RR.String(), - ShortRef: ExchangeEventsItemPath2.RR.ShortRef(), - ParentRef: ExchangeEventsItemPath2.RR.ToBuilder().Dir().ShortRef(), - ItemRef: ExchangeEventsItemPath2.ItemLocation(), - LocationRef: ExchangeEventsItemPath2.Loc.String(), - ItemInfo: details.ItemInfo{ - Exchange: &details.ExchangeInfo{ - ItemType: details.ExchangeEvent, - Organizer: "a-person", - Subject: "foo", - EventStart: Time2, - EventRecurs: true, + 2: { + { + RepoRef: ExchangeEventsItemPath1.RR.String(), + ShortRef: ExchangeEventsItemPath1.RR.ShortRef(), + ParentRef: ExchangeEventsItemPath1.RR.ToBuilder().Dir().ShortRef(), + LocationRef: ExchangeEventsItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeEvent, + Organizer: "a-person", + Subject: "foo", + EventStart: Time1, + EventRecurs: false, + }, + }, + }, + { + RepoRef: ExchangeEventsItemPath2.RR.String(), + ShortRef: ExchangeEventsItemPath2.RR.ShortRef(), + ParentRef: ExchangeEventsItemPath2.RR.ToBuilder().Dir().ShortRef(), + LocationRef: ExchangeEventsItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeEvent, + Organizer: "a-person", + Subject: "foo", + EventStart: Time2, + EventRecurs: true, + }, + }, + }, + }, + 0: { + { + RepoRef: ExchangeEventsItemPath1.locationAsRepoRef().String(), + ShortRef: ExchangeEventsItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeEventsItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeEvent, + Organizer: "a-person", + Subject: "foo", + EventStart: Time1, + EventRecurs: false, + }, + }, + }, + { + RepoRef: ExchangeEventsItemPath2.locationAsRepoRef().String(), + ShortRef: ExchangeEventsItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: ExchangeEventsItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + Exchange: &details.ExchangeInfo{ + ItemType: details.ExchangeEvent, + Organizer: "a-person", + Subject: "foo", + EventStart: Time2, + EventRecurs: true, + }, }, }, }, @@ -281,58 +518,213 @@ var ( OneDriveParentFolder1 = OneDriveBasePath1.Loc.PopFront().String() OneDriveParentFolder2 = OneDriveBasePath2.Loc.PopFront().String() - OneDriveItems = []details.Entry{ - { - RepoRef: OneDriveItemPath1.RR.String(), - ShortRef: OneDriveItemPath1.RR.ShortRef(), - ParentRef: OneDriveItemPath1.RR.ToBuilder().Dir().ShortRef(), - ItemRef: OneDriveItemPath1.ItemLocation(), - LocationRef: OneDriveItemPath1.Loc.String(), - ItemInfo: details.ItemInfo{ - OneDrive: &details.OneDriveInfo{ - ItemType: details.OneDriveItem, - ParentPath: OneDriveFolderFolder, - ItemName: OneDriveItemPath1.ItemLocation() + "name", - Size: int64(23), - Owner: UserEmail1, - Created: Time2, - Modified: Time4, + oneDriveItemsByVersion = map[int][]details.Entry{ + version.All8MigrateUserPNToID: { + { + RepoRef: OneDriveItemPath1.locationAsRepoRef().String(), + ShortRef: OneDriveItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: OneDriveItemPath1.ItemLocation(), + LocationRef: OneDriveItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveFolderFolder, + ItemName: OneDriveItemPath1.ItemLocation() + "name", + Size: int64(23), + Owner: UserEmail1, + Created: Time2, + Modified: Time4, + }, + }, + }, + { + RepoRef: OneDriveItemPath2.locationAsRepoRef().String(), + ShortRef: OneDriveItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: OneDriveItemPath2.ItemLocation(), + LocationRef: OneDriveItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveParentFolder1, + ItemName: OneDriveItemPath2.ItemLocation() + "name", + Size: int64(42), + Owner: UserEmail1, + Created: Time1, + Modified: Time3, + }, + }, + }, + { + RepoRef: OneDriveItemPath3.locationAsRepoRef().String(), + ShortRef: OneDriveItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: OneDriveItemPath3.ItemLocation(), + LocationRef: OneDriveItemPath3.Loc.String(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveParentFolder2, + ItemName: OneDriveItemPath3.ItemLocation() + "name", + Size: int64(19), + Owner: UserEmail2, + Created: Time2, + Modified: Time4, + }, }, }, }, - { - RepoRef: OneDriveItemPath2.RR.String(), - ShortRef: OneDriveItemPath2.RR.ShortRef(), - ParentRef: OneDriveItemPath2.RR.ToBuilder().Dir().ShortRef(), - ItemRef: OneDriveItemPath2.ItemLocation(), - LocationRef: OneDriveItemPath2.Loc.String(), - ItemInfo: details.ItemInfo{ - OneDrive: &details.OneDriveInfo{ - ItemType: details.OneDriveItem, - ParentPath: OneDriveParentFolder1, - ItemName: OneDriveItemPath2.ItemLocation() + "name", - Size: int64(42), - Owner: UserEmail1, - Created: Time1, - Modified: Time3, + version.OneDrive7LocationRef: { + { + RepoRef: OneDriveItemPath1.locationAsRepoRef().String(), + ShortRef: OneDriveItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + LocationRef: OneDriveItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveFolderFolder, + ItemName: OneDriveItemPath1.ItemLocation() + "name", + Size: int64(23), + Owner: UserEmail1, + Created: Time2, + Modified: Time4, + }, + }, + }, + { + RepoRef: OneDriveItemPath2.locationAsRepoRef().String(), + ShortRef: OneDriveItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + LocationRef: OneDriveItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveParentFolder1, + ItemName: OneDriveItemPath2.ItemLocation() + "name", + Size: int64(42), + Owner: UserEmail1, + Created: Time1, + Modified: Time3, + }, + }, + }, + { + RepoRef: OneDriveItemPath3.locationAsRepoRef().String(), + ShortRef: OneDriveItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + LocationRef: OneDriveItemPath3.Loc.String(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveParentFolder2, + ItemName: OneDriveItemPath3.ItemLocation() + "name", + Size: int64(19), + Owner: UserEmail2, + Created: Time2, + Modified: Time4, + }, }, }, }, - { - RepoRef: OneDriveItemPath3.RR.String(), - ShortRef: OneDriveItemPath3.RR.ShortRef(), - ParentRef: OneDriveItemPath3.RR.ToBuilder().Dir().ShortRef(), - ItemRef: OneDriveItemPath3.ItemLocation(), - LocationRef: OneDriveItemPath3.Loc.String(), - ItemInfo: details.ItemInfo{ - OneDrive: &details.OneDriveInfo{ - ItemType: details.OneDriveItem, - ParentPath: OneDriveParentFolder2, - ItemName: OneDriveItemPath3.ItemLocation() + "name", - Size: int64(19), - Owner: UserEmail2, - Created: Time2, - Modified: Time4, + version.OneDrive6NameInMeta: { + { + RepoRef: OneDriveItemPath1.locationAsRepoRef().String(), + ShortRef: OneDriveItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveFolderFolder, + ItemName: OneDriveItemPath1.ItemLocation() + "name", + Size: int64(23), + Owner: UserEmail1, + Created: Time2, + Modified: Time4, + }, + }, + }, + { + RepoRef: OneDriveItemPath2.locationAsRepoRef().String(), + ShortRef: OneDriveItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveParentFolder1, + ItemName: OneDriveItemPath2.ItemLocation() + "name", + Size: int64(42), + Owner: UserEmail1, + Created: Time1, + Modified: Time3, + }, + }, + }, + { + RepoRef: OneDriveItemPath3.locationAsRepoRef().String(), + ShortRef: OneDriveItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveParentFolder2, + ItemName: OneDriveItemPath3.ItemLocation() + "name", + Size: int64(19), + Owner: UserEmail2, + Created: Time2, + Modified: Time4, + }, + }, + }, + }, + 0: { + { + RepoRef: OneDriveItemPath1.locationAsRepoRef().String() + "name", + ShortRef: OneDriveItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveFolderFolder, + ItemName: OneDriveItemPath1.ItemLocation() + "name", + Size: int64(23), + Owner: UserEmail1, + Created: Time2, + Modified: Time4, + }, + }, + }, + { + RepoRef: OneDriveItemPath2.locationAsRepoRef().String() + "name", + ShortRef: OneDriveItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveParentFolder1, + ItemName: OneDriveItemPath2.ItemLocation() + "name", + Size: int64(42), + Owner: UserEmail1, + Created: Time1, + Modified: Time3, + }, + }, + }, + { + RepoRef: OneDriveItemPath3.locationAsRepoRef().String() + "name", + ShortRef: OneDriveItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: OneDriveItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + OneDrive: &details.OneDriveInfo{ + ItemType: details.OneDriveItem, + ParentPath: OneDriveParentFolder2, + ItemName: OneDriveItemPath3.ItemLocation() + "name", + Size: int64(19), + Owner: UserEmail2, + Created: Time2, + Modified: Time4, + }, }, }, }, @@ -351,85 +743,241 @@ var ( SharePointParentLibrary1 = SharePointBasePath1.Loc.PopFront().String() SharePointParentLibrary2 = SharePointBasePath2.Loc.PopFront().String() - SharePointLibraryItems = []details.Entry{ - { - RepoRef: SharePointLibraryItemPath1.RR.String(), - ShortRef: SharePointLibraryItemPath1.RR.ShortRef(), - ParentRef: SharePointLibraryItemPath1.RR.ToBuilder().Dir().ShortRef(), - ItemRef: SharePointLibraryItemPath1.ItemLocation(), - LocationRef: SharePointLibraryItemPath1.Loc.String(), - ItemInfo: details.ItemInfo{ - SharePoint: &details.SharePointInfo{ - ItemType: details.SharePointLibrary, - ParentPath: SharePointLibraryFolder, - ItemName: SharePointLibraryItemPath1.ItemLocation() + "name", - Size: int64(23), - Owner: UserEmail1, - Created: Time2, - Modified: Time4, + sharePointLibraryItemsByVersion = map[int][]details.Entry{ + version.All8MigrateUserPNToID: { + { + RepoRef: SharePointLibraryItemPath1.locationAsRepoRef().String(), + ShortRef: SharePointLibraryItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: SharePointLibraryItemPath1.ItemLocation(), + LocationRef: SharePointLibraryItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.SharePointLibrary, + ParentPath: SharePointLibraryFolder, + ItemName: SharePointLibraryItemPath1.ItemLocation() + "name", + Size: int64(23), + Owner: UserEmail1, + Created: Time2, + Modified: Time4, + }, + }, + }, + { + RepoRef: SharePointLibraryItemPath2.locationAsRepoRef().String(), + ShortRef: SharePointLibraryItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: SharePointLibraryItemPath2.ItemLocation(), + LocationRef: SharePointLibraryItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.SharePointLibrary, + ParentPath: SharePointParentLibrary1, + ItemName: SharePointLibraryItemPath2.ItemLocation() + "name", + Size: int64(42), + Owner: UserEmail1, + Created: Time1, + Modified: Time3, + }, + }, + }, + { + RepoRef: SharePointLibraryItemPath3.locationAsRepoRef().String(), + ShortRef: SharePointLibraryItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemRef: SharePointLibraryItemPath3.ItemLocation(), + LocationRef: SharePointLibraryItemPath3.Loc.String(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.SharePointLibrary, + ParentPath: SharePointParentLibrary2, + ItemName: SharePointLibraryItemPath3.ItemLocation() + "name", + Size: int64(19), + Owner: UserEmail2, + Created: Time2, + Modified: Time4, + }, }, }, }, - { - RepoRef: SharePointLibraryItemPath2.RR.String(), - ShortRef: SharePointLibraryItemPath2.RR.ShortRef(), - ParentRef: SharePointLibraryItemPath2.RR.ToBuilder().Dir().ShortRef(), - ItemRef: SharePointLibraryItemPath2.ItemLocation(), - LocationRef: SharePointLibraryItemPath2.Loc.String(), - ItemInfo: details.ItemInfo{ - SharePoint: &details.SharePointInfo{ - ItemType: details.SharePointLibrary, - ParentPath: SharePointParentLibrary1, - ItemName: SharePointLibraryItemPath2.ItemLocation() + "name", - Size: int64(42), - Owner: UserEmail1, - Created: Time1, - Modified: Time3, + version.OneDrive7LocationRef: { + { + RepoRef: SharePointLibraryItemPath1.locationAsRepoRef().String(), + ShortRef: SharePointLibraryItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + LocationRef: SharePointLibraryItemPath1.Loc.String(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.OneDriveItem, + ParentPath: SharePointLibraryFolder, + ItemName: SharePointLibraryItemPath1.ItemLocation() + "name", + Size: int64(23), + Owner: UserEmail1, + Created: Time2, + Modified: Time4, + }, + }, + }, + { + RepoRef: SharePointLibraryItemPath2.locationAsRepoRef().String(), + ShortRef: SharePointLibraryItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + LocationRef: SharePointLibraryItemPath2.Loc.String(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.OneDriveItem, + ParentPath: SharePointParentLibrary1, + ItemName: SharePointLibraryItemPath2.ItemLocation() + "name", + Size: int64(42), + Owner: UserEmail1, + Created: Time1, + Modified: Time3, + }, + }, + }, + { + RepoRef: SharePointLibraryItemPath3.locationAsRepoRef().String(), + ShortRef: SharePointLibraryItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + LocationRef: SharePointLibraryItemPath3.Loc.String(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.OneDriveItem, + ParentPath: SharePointParentLibrary2, + ItemName: SharePointLibraryItemPath3.ItemLocation() + "name", + Size: int64(19), + Owner: UserEmail2, + Created: Time2, + Modified: Time4, + }, }, }, }, - { - RepoRef: SharePointLibraryItemPath3.RR.String(), - ShortRef: SharePointLibraryItemPath3.RR.ShortRef(), - ParentRef: SharePointLibraryItemPath3.RR.ToBuilder().Dir().ShortRef(), - ItemRef: SharePointLibraryItemPath3.ItemLocation(), - LocationRef: SharePointLibraryItemPath3.Loc.String(), - ItemInfo: details.ItemInfo{ - SharePoint: &details.SharePointInfo{ - ItemType: details.SharePointLibrary, - ParentPath: SharePointParentLibrary2, - ItemName: SharePointLibraryItemPath3.ItemLocation() + "name", - Size: int64(19), - Owner: UserEmail2, - Created: Time2, - Modified: Time4, + version.OneDrive6NameInMeta: { + { + RepoRef: SharePointLibraryItemPath1.locationAsRepoRef().String(), + ShortRef: SharePointLibraryItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.OneDriveItem, + ParentPath: SharePointLibraryFolder, + ItemName: SharePointLibraryItemPath1.ItemLocation() + "name", + Size: int64(23), + Owner: UserEmail1, + Created: Time2, + Modified: Time4, + }, + }, + }, + { + RepoRef: SharePointLibraryItemPath2.locationAsRepoRef().String(), + ShortRef: SharePointLibraryItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.OneDriveItem, + ParentPath: SharePointParentLibrary1, + ItemName: SharePointLibraryItemPath2.ItemLocation() + "name", + Size: int64(42), + Owner: UserEmail1, + Created: Time1, + Modified: Time3, + }, + }, + }, + { + RepoRef: SharePointLibraryItemPath3.locationAsRepoRef().String(), + ShortRef: SharePointLibraryItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.OneDriveItem, + ParentPath: SharePointParentLibrary2, + ItemName: SharePointLibraryItemPath3.ItemLocation() + "name", + Size: int64(19), + Owner: UserEmail2, + Created: Time2, + Modified: Time4, + }, + }, + }, + }, + 0: { + { + RepoRef: SharePointLibraryItemPath1.locationAsRepoRef().String() + "name", + ShortRef: SharePointLibraryItemPath1.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.OneDriveItem, + ParentPath: SharePointLibraryFolder, + ItemName: SharePointLibraryItemPath1.ItemLocation() + "name", + Size: int64(23), + Owner: UserEmail1, + Created: Time2, + Modified: Time4, + }, + }, + }, + { + RepoRef: SharePointLibraryItemPath2.locationAsRepoRef().String() + "name", + ShortRef: SharePointLibraryItemPath2.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.OneDriveItem, + ParentPath: SharePointParentLibrary1, + ItemName: SharePointLibraryItemPath2.ItemLocation() + "name", + Size: int64(42), + Owner: UserEmail1, + Created: Time1, + Modified: Time3, + }, + }, + }, + { + RepoRef: SharePointLibraryItemPath3.locationAsRepoRef().String() + "name", + ShortRef: SharePointLibraryItemPath3.locationAsRepoRef().ShortRef(), + ParentRef: SharePointLibraryItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(), + ItemInfo: details.ItemInfo{ + SharePoint: &details.SharePointInfo{ + ItemType: details.OneDriveItem, + ParentPath: SharePointParentLibrary2, + ItemName: SharePointLibraryItemPath3.ItemLocation() + "name", + Size: int64(19), + Owner: UserEmail2, + Created: Time2, + Modified: Time4, + }, }, }, }, } ) -func GetDetailsSet() *details.Details { +func GetDetailsSetForVersion(t *testing.T, wantedVersion int) *details.Details { entries := []details.Entry{} - - for _, e := range ExchangeEmailItems { - entries = append(entries, e) + // TODO(ashmrtn): At some point make an exported variable somewhere that has + // all the valid service/category pairs. + dataTypes := map[path.ServiceType][]path.CategoryType{ + path.ExchangeService: { + path.EmailCategory, + path.EventsCategory, + path.ContactsCategory, + }, + path.OneDriveService: { + path.FilesCategory, + }, + path.SharePointService: { + path.LibrariesCategory, + }, } - for _, e := range ExchangeContactsItems { - entries = append(entries, e) - } - - for _, e := range ExchangeEventsItems { - entries = append(entries, e) - } - - for _, e := range OneDriveItems { - entries = append(entries, e) - } - - for _, e := range SharePointLibraryItems { - entries = append(entries, e) + for s, cats := range dataTypes { + for _, cat := range cats { + entries = append(entries, GetDeetsForVersion(t, s, cat, wantedVersion)...) + } } return &details.Details{ @@ -438,3 +986,95 @@ func GetDetailsSet() *details.Details { }, } } + +// GetItemsForVersion returns the set of items for the requested +// (service, category, version) tuple that reside at the indicated indices. If +// -1 is the only index provided then returns all items. +func GetItemsForVersion( + t *testing.T, + service path.ServiceType, + cat path.CategoryType, + wantVersion int, + indices ...int, +) []details.Entry { + deets := GetDeetsForVersion(t, service, cat, wantVersion) + + if len(indices) == 1 && indices[0] == -1 { + return deets + } + + var res []details.Entry + + for _, i := range indices { + require.Less(t, i, len(deets), "requested index out of bounds", i, len(deets)) + res = append(res, deets[i]) + } + + return res +} + +// GetDeetsForVersion returns the set of details with the highest +// version <= the requested version. +func GetDeetsForVersion( + t *testing.T, + service path.ServiceType, + cat path.CategoryType, + wantVersion int, +) []details.Entry { + var input map[int][]details.Entry + + switch service { + case path.ExchangeService: + switch cat { + case path.EmailCategory: + input = exchangeEmailItemsByVersion + + case path.EventsCategory: + input = exchangeEventsItemsByVersion + + case path.ContactsCategory: + input = exchangeContactsItemsByVersion + } + + case path.OneDriveService: + if cat == path.FilesCategory { + input = oneDriveItemsByVersion + } + + case path.SharePointService: + if cat == path.LibrariesCategory { + input = sharePointLibraryItemsByVersion + } + } + + require.NotNil( + t, + input, + "unsupported (service, category)", + service.String(), + cat.String()) + + return getDeetsForVersion(t, wantVersion, input) +} + +func getDeetsForVersion( + t *testing.T, + wantVersion int, + deetsSet map[int][]details.Entry, +) []details.Entry { + var ( + res []details.Entry + resVersion = version.NoBackup + ) + + for v, deets := range deetsSet { + if v <= wantVersion && v > resVersion { + resVersion = v + res = deets + } + } + + require.NotEmpty(t, res, "unable to find details for version", wantVersion) + + return slices.Clone(res) +} diff --git a/src/pkg/selectors/selectors_reduce_test.go b/src/pkg/selectors/selectors_reduce_test.go index c57cde409..51540ce48 100644 --- a/src/pkg/selectors/selectors_reduce_test.go +++ b/src/pkg/selectors/selectors_reduce_test.go @@ -1,6 +1,7 @@ package selectors_test import ( + "fmt" "testing" "time" @@ -9,9 +10,11 @@ import ( "github.com/alcionai/corso/src/internal/common/dttm" "github.com/alcionai/corso/src/internal/tester" + "github.com/alcionai/corso/src/internal/version" "github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/backup/details/testdata" "github.com/alcionai/corso/src/pkg/fault" + "github.com/alcionai/corso/src/pkg/path" "github.com/alcionai/corso/src/pkg/selectors" ) @@ -27,25 +30,31 @@ func (suite *SelectorReduceSuite) TestReduce() { ctx, flush := tester.NewContext() defer flush() - allDetails := testdata.GetDetailsSet() table := []struct { name string - selFunc func() selectors.Reducer - expected []details.Entry + selFunc func(t *testing.T, wantVersion int) selectors.Reducer + expected func(t *testing.T, wantVersion int) []details.Entry }{ { name: "ExchangeAllMail", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.Mails(selectors.Any(), selectors.Any())) return sel }, - expected: testdata.ExchangeEmailItems, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + -1) + }, }, { name: "ExchangeMailFolderPrefixMatch", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.MailFolders( []string{testdata.ExchangeEmailInboxPath.FolderLocation()}, @@ -53,48 +62,79 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: testdata.ExchangeEmailItems, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + -1) + }, }, { name: "ExchangeMailSubject", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Filter(sel.MailSubject("foo")) return sel }, - expected: []details.Entry{testdata.ExchangeEmailItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + 0) + }, }, { name: "ExchangeMailSubjectExcludeItem", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { + deets := testdata.GetDeetsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion) + sel := selectors.NewExchangeRestore(selectors.Any()) sel.Filter(sel.MailSender("a-person")) sel.Exclude(sel.Mails( selectors.Any(), - []string{testdata.ExchangeEmailItemPath2.RR.ShortRef()}, + []string{deets[1].ShortRef}, )) return sel }, - expected: []details.Entry{testdata.ExchangeEmailItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + 0) + }, }, { name: "ExchangeMailSender", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Filter(sel.MailSender("a-person")) return sel }, - expected: []details.Entry{ - testdata.ExchangeEmailItems[0], - testdata.ExchangeEmailItems[1], + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + 0, 1) }, }, { name: "ExchangeMailReceivedTime", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Filter(sel.MailReceivedBefore( dttm.Format(testdata.Time1.Add(time.Second)), @@ -102,11 +142,18 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: []details.Entry{testdata.ExchangeEmailItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + 0) + }, }, { name: "ExchangeMailID", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.Mails( selectors.Any(), @@ -115,24 +162,44 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: []details.Entry{testdata.ExchangeEmailItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + 0) + }, }, { name: "ExchangeMailShortRef", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { + deets := testdata.GetDeetsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion) + sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.Mails( selectors.Any(), - []string{testdata.ExchangeEmailItemPath1.RR.ShortRef()}, + []string{deets[0].ShortRef}, )) return sel }, - expected: []details.Entry{testdata.ExchangeEmailItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + 0) + }, }, { name: "ExchangeAllEventsAndMailWithSubject", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.Events( selectors.Any(), @@ -142,39 +209,62 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: []details.Entry{testdata.ExchangeEmailItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + 0) + }, }, { name: "ExchangeEventsAndMailWithSubject", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Filter(sel.EventSubject("foo")) sel.Filter(sel.MailSubject("foo")) return sel }, - expected: []details.Entry{}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return []details.Entry{} + }, }, { name: "ExchangeAll", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.AllData()) return sel }, - expected: append( - append( + expected: func(t *testing.T, wantVersion int) []details.Entry { + return append( append( - []details.Entry{}, - testdata.ExchangeEmailItems...), - testdata.ExchangeContactsItems...), - testdata.ExchangeEventsItems..., - ), + testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + -1), + testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EventsCategory, + wantVersion, + -1)...), + testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.ContactsCategory, + wantVersion, + -1)...) + }, }, { name: "ExchangeMailByFolder", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.MailFolders( []string{testdata.ExchangeEmailBasePath.FolderLocation()}, @@ -182,14 +272,21 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: []details.Entry{testdata.ExchangeEmailItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + 0) + }, }, // TODO (keepers): all folders are treated as prefix-matches at this time. // so this test actually does nothing different. In the future, we'll // need to amend the non-prefix folder tests to expect non-prefix matches. { name: "ExchangeMailByFolderPrefix", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.MailFolders( []string{testdata.ExchangeEmailBasePath.FolderLocation()}, @@ -198,11 +295,18 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: []details.Entry{testdata.ExchangeEmailItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + 0) + }, }, { name: "ExchangeMailByFolderRoot", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.MailFolders( []string{testdata.ExchangeEmailInboxPath.FolderLocation()}, @@ -210,11 +314,18 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: testdata.ExchangeEmailItems, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EmailCategory, + wantVersion, + -1) + }, }, { name: "ExchangeContactByFolder", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.ContactFolders( []string{testdata.ExchangeContactsBasePath.FolderLocation()}, @@ -222,11 +333,18 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: []details.Entry{testdata.ExchangeContactsItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.ContactsCategory, + wantVersion, + 0) + }, }, { name: "ExchangeContactByFolderRoot", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.ContactFolders( []string{testdata.ExchangeContactsRootPath.FolderLocation()}, @@ -234,12 +352,19 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: testdata.ExchangeContactsItems, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.ContactsCategory, + wantVersion, + -1) + }, }, { name: "ExchangeEventsByFolder", - selFunc: func() selectors.Reducer { + selFunc: func(t *testing.T, wantVersion int) selectors.Reducer { sel := selectors.NewExchangeRestore(selectors.Any()) sel.Include(sel.EventCalendars( []string{testdata.ExchangeEventsBasePath.FolderLocation()}, @@ -247,16 +372,28 @@ func (suite *SelectorReduceSuite) TestReduce() { return sel }, - expected: []details.Entry{testdata.ExchangeEventsItems[0]}, + expected: func(t *testing.T, wantVersion int) []details.Entry { + return testdata.GetItemsForVersion( + t, + path.ExchangeService, + path.EventsCategory, + wantVersion, + 0) + }, }, } - for _, test := range table { - suite.Run(test.name, func() { - t := suite.T() + for v := 0; v <= version.Backup; v++ { + suite.Run(fmt.Sprintf("version%d", v), func() { + for _, test := range table { + suite.Run(test.name, func() { + t := suite.T() - output := test.selFunc().Reduce(ctx, allDetails, fault.New(true)) - assert.ElementsMatch(t, test.expected, output.Entries) + allDetails := testdata.GetDetailsSetForVersion(t, v) + output := test.selFunc(t, v).Reduce(ctx, allDetails, fault.New(true)) + assert.ElementsMatch(t, test.expected(t, v), output.Entries) + }) + } }) } } From f44836bae205af6e8910fc193cc7fbc83f8eb14e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 06:24:42 +0000 Subject: [PATCH 11/13] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20slackapi/slac?= =?UTF-8?q?k-github-action=20from=201.23.0=20to=201.24.0=20(#3467)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sanity-test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sanity-test.yaml b/.github/workflows/sanity-test.yaml index e5b7c57cb..a32ffb5fc 100644 --- a/.github/workflows/sanity-test.yaml +++ b/.github/workflows/sanity-test.yaml @@ -344,7 +344,7 @@ jobs: - name: Send Github Action failure to Slack id: slack-notification if: failure() - uses: slackapi/slack-github-action@v1.23.0 + uses: slackapi/slack-github-action@v1.24.0 with: payload: | { From 0cc68b56fa42faff3bf166f7ee53dfbcebd5cd69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 07:01:00 +0000 Subject: [PATCH 12/13] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20github.com/aw?= =?UTF-8?q?s/aws-sdk-go=20from=201.44.265=20to=201.44.266=20in=20/src=20(#?= =?UTF-8?q?3466)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.44.265 to 1.44.266.
    Release notes

    Sourced from github.com/aws/aws-sdk-go's releases.

    Release v1.44.266 (2023-05-19)

    Service Client Updates

    • service/backup: Updates service API and documentation
    • service/connectcases: Updates service API
    • service/mediapackagev2: Adds new service
    • service/sesv2: Updates service API, documentation, and examples
    Commits
    • 17200eb Release v1.44.266 (2023-05-19) (#4847)
    • 6b9e1f9 Merge pull request #4830 from addisonj/assumerolecreds_source_identity
    • 64deb07 Add support for SourceIdentity to stscreds.NewCredentials
    • See full diff in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/aws/aws-sdk-go&package-manager=go_modules&previous-version=1.44.265&new-version=1.44.266)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) You can trigger a rebase of this PR by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --- src/go.mod | 2 +- src/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/go.mod b/src/go.mod index 1a9c3d561..ae6c555aa 100644 --- a/src/go.mod +++ b/src/go.mod @@ -8,7 +8,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 github.com/alcionai/clues v0.0.0-20230406223931-f48777f4773c github.com/armon/go-metrics v0.4.1 - github.com/aws/aws-sdk-go v1.44.265 + github.com/aws/aws-sdk-go v1.44.266 github.com/aws/aws-xray-sdk-go v1.8.1 github.com/cenkalti/backoff/v4 v4.2.1 github.com/google/uuid v1.3.0 diff --git a/src/go.sum b/src/go.sum index 3b46687fb..990436dfc 100644 --- a/src/go.sum +++ b/src/go.sum @@ -66,8 +66,8 @@ github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/aws/aws-sdk-go v1.44.265 h1:rlBuD8OYjM5Vfcf7jDa264oVHqlPqY7y7o+JmrjNFUc= -github.com/aws/aws-sdk-go v1.44.265/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.266 h1:MWd775dcYf7NrwgcHLtlsIbWoWkX8p4vomfNHr88zH0= +github.com/aws/aws-sdk-go v1.44.266/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-xray-sdk-go v1.8.1 h1:O4pXV+hnCskaamGsZnFpzHyAmgPGusBMN6i7nnsy0Fo= github.com/aws/aws-xray-sdk-go v1.8.1/go.mod h1:wMmVYzej3sykAttNBkXQHK/+clAPWTOrPiajEk7Cp3A= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= From d1a4c68fea2de31639bf924fd547ca5ac9916319 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 07:42:29 +0000 Subject: [PATCH 13/13] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20github.com/st?= =?UTF-8?q?retchr/testify=20from=201.8.2=20to=201.8.3=20in=20/src=20(#3457?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.8.2 to 1.8.3.
    Commits

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/stretchr/testify&package-manager=go_modules&previous-version=1.8.2&new-version=1.8.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) You can trigger a rebase of this PR by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    --- src/go.mod | 2 +- src/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/go.mod b/src/go.mod index ae6c555aa..b64004f3d 100644 --- a/src/go.mod +++ b/src/go.mod @@ -27,7 +27,7 @@ require ( github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.15.0 - github.com/stretchr/testify v1.8.2 + github.com/stretchr/testify v1.8.3 github.com/tidwall/pretty v1.2.1 github.com/tomlazar/table v0.1.2 github.com/vbauerster/mpb/v8 v8.1.6 diff --git a/src/go.sum b/src/go.sum index 990436dfc..03d94a7b9 100644 --- a/src/go.sum +++ b/src/go.sum @@ -387,8 +387,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/tg123/go-htpasswd v1.2.1 h1:i4wfsX1KvvkyoMiHZzjS0VzbAPWfxzI8INcZAKtutoU=