From ee4394873b2d961e30db0399d62a7da36e639a88 Mon Sep 17 00:00:00 2001 From: fyears <1142836+fyears@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:58:05 +0800 Subject: [PATCH] upgrade check connections --- pro/src/fsAzureBlobStorage.ts | 2 +- pro/src/fsBox.ts | 2 +- pro/src/fsGoogleDrive.ts | 2 +- pro/src/fsKoofr.ts | 2 +- pro/src/fsOnedriveFull.ts | 5 +++- pro/src/fsPCloud.ts | 2 +- pro/src/fsYandexDisk.ts | 2 +- src/fsAll.ts | 45 +++++++++++++++++++++++++++++++++++ src/fsDropbox.ts | 5 ++-- src/fsMock.ts | 2 +- src/fsOnedrive.ts | 6 ++++- src/fsS3.ts | 14 +++++------ src/fsWebdav.ts | 12 ++++------ src/fsWebdis.ts | 6 ++++- 14 files changed, 79 insertions(+), 28 deletions(-) diff --git a/pro/src/fsAzureBlobStorage.ts b/pro/src/fsAzureBlobStorage.ts index ead113d..5f025b1 100644 --- a/pro/src/fsAzureBlobStorage.ts +++ b/pro/src/fsAzureBlobStorage.ts @@ -320,12 +320,12 @@ export class FakeFsAzureBlobStorage extends FakeFs { // if we can walk, we can connect try { await this.walkPartial(); - return true; } catch (err) { console.debug(err); callbackFunc?.(err); return false; } + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName(): Promise { diff --git a/pro/src/fsBox.ts b/pro/src/fsBox.ts index aa2fd4c..3a27f90 100644 --- a/pro/src/fsBox.ts +++ b/pro/src/fsBox.ts @@ -892,12 +892,12 @@ export class FakeFsBox extends FakeFs { // if we can init, we can connect try { await this._init(); - return true; } catch (err) { console.debug(err); callbackFunc?.(err); return false; } + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName(): Promise { throw new Error("Method not implemented."); diff --git a/pro/src/fsGoogleDrive.ts b/pro/src/fsGoogleDrive.ts index 91a0f29..52355af 100644 --- a/pro/src/fsGoogleDrive.ts +++ b/pro/src/fsGoogleDrive.ts @@ -728,12 +728,12 @@ export class FakeFsGoogleDrive extends FakeFs { // if we can init, we can connect try { await this._init(); - return true; } catch (err) { console.debug(err); callbackFunc?.(err); return false; } + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName(): Promise { diff --git a/pro/src/fsKoofr.ts b/pro/src/fsKoofr.ts index 46fe4f4..dec6889 100644 --- a/pro/src/fsKoofr.ts +++ b/pro/src/fsKoofr.ts @@ -555,12 +555,12 @@ export class FakeFsKoofr extends FakeFs { // if we can init, we can connect try { await this._init(); - return true; } catch (err) { console.debug(err); callbackFunc?.(err); return false; } + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName(): Promise { diff --git a/pro/src/fsOnedriveFull.ts b/pro/src/fsOnedriveFull.ts index e735aef..3aaf39f 100644 --- a/pro/src/fsOnedriveFull.ts +++ b/pro/src/fsOnedriveFull.ts @@ -916,12 +916,15 @@ export class FakeFsOnedriveFull extends FakeFs { async checkConnect(callbackFunc?: any): Promise { try { const k = await this.getUserDisplayName(); - return k !== ""; + if (k === "") { + throw Error(`unknown display name!`); + } } catch (err) { console.debug(err); callbackFunc?.(err); return false; } + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName() { diff --git a/pro/src/fsPCloud.ts b/pro/src/fsPCloud.ts index d80c2bf..b3eda2b 100644 --- a/pro/src/fsPCloud.ts +++ b/pro/src/fsPCloud.ts @@ -604,12 +604,12 @@ export class FakeFsPCloud extends FakeFs { // if we can init, we can connect try { await this._init(); - return true; } catch (err) { console.debug(err); callbackFunc?.(err); return false; } + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName(): Promise { diff --git a/pro/src/fsYandexDisk.ts b/pro/src/fsYandexDisk.ts index e6fe435..889fb94 100644 --- a/pro/src/fsYandexDisk.ts +++ b/pro/src/fsYandexDisk.ts @@ -480,12 +480,12 @@ export class FakeFsYandexDisk extends FakeFs { // if we can init, we can connect try { await this._init(); - return true; } catch (err) { console.debug(err); callbackFunc?.(err); return false; } + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName(): Promise { diff --git a/src/fsAll.ts b/src/fsAll.ts index 47fb2c7..e81812a 100644 --- a/src/fsAll.ts +++ b/src/fsAll.ts @@ -1,3 +1,5 @@ +import isEqual from "lodash/isEqual"; +import { nanoid } from "nanoid"; import type { Entity } from "./baseTypes"; export abstract class FakeFs { @@ -16,6 +18,49 @@ export abstract class FakeFs { abstract rename(key1: string, key2: string): Promise; abstract rm(key: string): Promise; abstract checkConnect(callbackFunc?: any): Promise; + async checkConnectCommonOps(callbackFunc?: any) { + try { + console.info(`check connect: create folder`); + const folderName = `rs-test-folder-${nanoid()}/`; + await this.mkdir(folderName); + // await delay(3000); + + console.info(`check connect: upload file`); + const filename = `${folderName}/rs-test-file-${nanoid()}`; + const ctime = Date.now(); + const mtime1 = Date.now(); + const content1 = new ArrayBuffer(100); + await this.writeFile(filename, content1, mtime1, ctime); + // await delay(3000); + + console.info(`check connect: overwrite file`); + const mtime2 = Date.now(); + const content2 = new ArrayBuffer(200); + await this.writeFile(filename, content2, mtime2, ctime); + // await delay(3000); + + console.info(`check connect: download file`); + const content3 = await this.readFile(filename); + if (!isEqual(content2, content3)) { + throw Error(`downloaded file is not equal with uploaded file!`); + } + // await delay(3000); + + console.info(`check connect: delete file`); + await this.rm(filename); + // await delay(3000); + + console.info(`check connect: delete folder`); + await this.rm(folderName); + // await delay(3000); + + return true; + } catch (err) { + console.error(err); + callbackFunc?.(err); + return false; + } + } abstract getUserDisplayName(): Promise; abstract revokeAuth(): Promise; abstract allowEmptyFile(): boolean; diff --git a/src/fsDropbox.ts b/src/fsDropbox.ts index eb1cb95..4e9db76 100644 --- a/src/fsDropbox.ts +++ b/src/fsDropbox.ts @@ -741,14 +741,15 @@ export class FakeFsDropbox extends FakeFs { await this._init(); const results = await this._statFromRoot(`/${this.remoteBaseDir}`); if (results === undefined) { - return false; + throw Error(`cannot check root vault folder!`); } - return true; } catch (err) { console.debug(err); callbackFunc?.(err); return false; } + + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName() { diff --git a/src/fsMock.ts b/src/fsMock.ts index e368e99..f23e551 100644 --- a/src/fsMock.ts +++ b/src/fsMock.ts @@ -47,7 +47,7 @@ export class FakeFsMock extends FakeFs { } async checkConnect(callbackFunc?: any): Promise { - return true; + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName(): Promise { diff --git a/src/fsOnedrive.ts b/src/fsOnedrive.ts index a96bee2..19a087b 100644 --- a/src/fsOnedrive.ts +++ b/src/fsOnedrive.ts @@ -1036,12 +1036,16 @@ export class FakeFsOnedrive extends FakeFs { async checkConnect(callbackFunc?: any): Promise { try { const k = await this.getUserDisplayName(); - return k !== ""; + if (k === "") { + throw Error(`unknown display name!`); + } } catch (err) { console.debug(err); callbackFunc?.(err); return false; } + + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName() { diff --git a/src/fsS3.ts b/src/fsS3.ts index ef0c75f..f07aeff 100644 --- a/src/fsS3.ts +++ b/src/fsS3.ts @@ -831,14 +831,11 @@ export class FakeFsS3 extends FakeFs { results.$metadata === undefined || results.$metadata.httpStatusCode === undefined ) { - const err = "results or $metadata or httStatusCode is undefined"; - console.debug(err); - if (callbackFunc !== undefined) { - callbackFunc(err); - } - return false; + throw Error("results or $metadata or httStatusCode is undefined"); + } + if (results.$metadata.httpStatusCode !== 200) { + throw Error(`not 200 httpStatusCode`); } - return results.$metadata.httpStatusCode === 200; } catch (err: any) { console.debug(err); if (callbackFunc !== undefined) { @@ -854,9 +851,10 @@ export class FakeFsS3 extends FakeFs { callbackFunc(err); } } - return false; } + + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName(): Promise { diff --git a/src/fsWebdav.ts b/src/fsWebdav.ts index 377af83..2eb6054 100644 --- a/src/fsWebdav.ts +++ b/src/fsWebdav.ts @@ -4,8 +4,6 @@ import { getReasonPhrase } from "http-status-codes/build/cjs/utils-functions"; import chunk from "lodash/chunk"; import cloneDeep from "lodash/cloneDeep"; import flatten from "lodash/flatten"; -import isString from "lodash/isString"; -import { nanoid } from "nanoid"; import { Platform, type RequestUrlParam, requestUrl } from "obsidian"; import type { FileStat, @@ -140,10 +138,10 @@ if (VALID_REQURL) { ); } +import isEqual from "lodash/isEqual"; // @ts-ignore // biome-ignore lint: we want to ts-ignore the next line import { AuthType, BufferLike, createClient } from "webdav/dist/web/index.js"; -import isEqual from "lodash/isEqual"; export const DEFAULT_WEBDAV_CONFIG = { address: "", @@ -925,17 +923,15 @@ export class FakeFsWebdav extends FakeFs { await this._init(); const results = await this._statFromRoot(`/${this.remoteBaseDir}/`); if (results === undefined) { - const err = "results is undefined"; - console.error(err); - callbackFunc?.(err); - return false; + throw Error("cannot stat root vault folder!"); } - return true; } catch (err) { console.error(err); callbackFunc?.(err); return false; } + + return await this.checkConnectCommonOps(callbackFunc); } async getUserDisplayName(): Promise { diff --git a/src/fsWebdis.ts b/src/fsWebdis.ts index ac59951..9c6b07f 100644 --- a/src/fsWebdis.ts +++ b/src/fsWebdis.ts @@ -252,12 +252,16 @@ export class FakeFsWebdis extends FakeFs { const k = await ( await this._fetchCommand("GET", "PING/helloworld") ).json(); - return isEqual(k, { PING: "helloworld" }); + if (!isEqual(k, { PING: "helloworld" })) { + throw Error(`no correct ping response`); + } } catch (err: any) { console.error(err); callbackFunc?.(err); return false; } + return await this.checkConnectCommonOps(callbackFunc); + // return true; } async getUserDisplayName(): Promise {