SFTPを用いてMongoDBにファイル転送を行うことができます。
dockerが導入されていること。
testフォルダに格納されているdocker-compose.ymlを用いてテスト環境を構築することができます。
docker compose -f test/docker-compose.yml up
を実行することで、以下の3つのコンテナが建てられます。
FTPのユーザ名anonymousでログインする形にあたるものはSFTPでは実装しないため、テスト用ユーザおよび作業ディレクトリを予め MongoDB に作成しておきます。
必要に応じて、テストユーザおよび作業ディレクトリを追加してください。
docker exec コマンド、もしくは docker desktop の Terminal などを用いて mongo のコンソールを開きます。
docker exec -it {mongoのコンテナID} /bin/bash
Mongo Shell を使い、データを作成する
mongosh -u {username} -p {password}
docker-compose.yml の mongo の環境変数
データベースを files_db に切り替える
use files_db
テストユーザ(例:TEST001)を追加する。whitelist は環境に合わせる
db.fs.works.insert({
name: 'TEST001',
idmIdentifier: 'TEST001',
password: 'example',
whitelist: [ '127.0.0.1', '::1', '172.30.0.1' ]
});
[参考]
ログインに失敗したときは、whitelist に含まれていない可能性がある。ログ
docker logs sftpserverのclient infoで確認することができる
作業ディレクトリ(例:TEST001)およびpublicディレクトリを追加する
db.fs.dirs.insert({
dirname: 'TEST001',
uploadDate: new Date,
parent_id: "root",
fullpath: ["root","TEST001"],
unique: "/root/TEST001"
});
db.fs.dirs.insert({
dirname: 'public',
uploadDate: new Date,
parent_id: "root",
fullpath: ["root","public"],
unique: "/root/public"
});
まず、
docker exec -it {ubuntuのコンテナID} /bin/bash
もしくはdocker desktop のTerminalなどを用いてubuntuのコンソールを開きます。 この状態で MongoDB に作成したユーザを使い、
sftp -oPort="8822" {テストユーザID}@sftpserver
を実行し、パスワードを入力すれば各種コマンドのテストを行うことができます。
GitHubにソースをpushすると、GitHub Actions を用いて、テストが自動実行されます。
GitHub Actions ワークフローを修正したときなどpush前に自動テストを実行したい場合は、actライブラリを使うことで、ソースをpushしたときとほぼ同様の実行確認ができます。無駄な(失敗)プッシュを避けるためにも有効です。
例:
$ cd ${docker-sftp-serverディレクトリ}
$ curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash
$ ./bin/act -l
$ ./bin/act
ローカル環境で自動テストを実行することも可能です。
testを実行する
$ cd ${docker-sftp-serverディレクトリ}
$ npm run test
[参考]
デバッグなど、ローカルソースのサーバを使ったテストをする場合は、 sftpserver コンテナを停止し(
docker compose -f test/docker-compose.yml stop sftpserver)、npm run startでサーバを起動して使用する。start の実行コマンドは環境変数など必要に応じて修正するとよい
ローカル環境で単体テストの自動テストを実行することも可能です。 docker composeによる sftpserver、mongo、ubuntu コンテナの起動は不要です。
unittestを実行する
$ cd ${docker-sftp-serverディレクトリ}
$ npm run unittest
[注意]
unittest実行前に、テスト対象ファイル server.ts の server 属性を export した server4unittest.ts をコピー作成し、server4unittest.ts に対してテストを実行している(単体テスト内で server属性を参照する必要があったため)。 既に server4unittest.ts が存在する場合は、次のエラーを表示し再作成しないため、必要に応じて削除してから実行すること(server.ts の更新が server4unittest.ts に反映されていない状態でテストする可能性がある)。
WARNING: The unit test source have not been recreated.(server4unittest.ts)
ubuntuのコンテナにて/test-filesをvolumeに設定しています。
ubuntuからファイル転送のテストを行いたい場合はここにファイルを入れてテストを行なってください。
docker-compose.ymlのenvironmentで環境変数を設定することができます。
Content type
Image
Digest
sha256:5910b421e…
Size
443 MB
Last updated
over 1 year ago
docker pull procube/sftp-server