diff --git a/.github/services/webdav/nextcloud/action.yml b/.github/services/webdav/nextcloud/action.yml new file mode 100644 index 000000000000..16a0db4e7b79 --- /dev/null +++ b/.github/services/webdav/nextcloud/action.yml @@ -0,0 +1,35 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: nextcloud +description: "Behavior test for nextcloud" + +runs: + using: "composite" + steps: + - name: Setup nextcloud + shell: bash + working-directory: fixtures/webdav + run: docker compose -f docker-compose-webdav-nextcloud.yml up -d --wait + - name: Setup + shell: bash + run: | + cat << EOF >> $GITHUB_ENV + OPENDAL_WEBDAV_ENDPOINT=http://127.0.0.1:8080/remote.php/webdav/ + OPENDAL_WEBDAV_USERNAME=admin + OPENDAL_WEBDAV_PASSWORD=admin + EOF diff --git a/.github/services/webdav/nginx/action.yml b/.github/services/webdav/nginx/action.yml new file mode 100644 index 000000000000..0559a076d659 --- /dev/null +++ b/.github/services/webdav/nginx/action.yml @@ -0,0 +1,33 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: nginx +description: "Behavior test for webdav in nginx" + +runs: + using: "composite" + steps: + - name: Setup webdav in nginx + shell: bash + working-directory: fixtures/webdav + run: docker compose -f docker-compose-webdav.yml up -d --wait + - name: Setup + shell: bash + run: | + cat << EOF >> $GITHUB_ENV + OPENDAL_WEBDAV_ENDPOINT=http://127.0.0.1:8080 + EOF diff --git a/.github/services/webdav/nginx_with_empty_password/action.yml b/.github/services/webdav/nginx_with_empty_password/action.yml new file mode 100644 index 000000000000..655e22a531bc --- /dev/null +++ b/.github/services/webdav/nginx_with_empty_password/action.yml @@ -0,0 +1,34 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: nginx_with_empty_password +description: "Behavior test for nginx_with_empty_password in nginx" + +runs: + using: "composite" + steps: + - name: Setup webdav in nginx_with_empty_password + shell: bash + working-directory: fixtures/webdav + run: docker compose -f docker-compose-webdav-with-empty-passwd.yml up -d --wait + - name: Setup + shell: bash + run: | + cat << EOF >> $GITHUB_ENV + OPENDAL_WEBDAV_ENDPOINT=http://127.0.0.1:8080 + OPENDAL_WEBDAV_USERNAME=foo + EOF diff --git a/.github/services/webdav/nginx_with_password/action.yml b/.github/services/webdav/nginx_with_password/action.yml new file mode 100644 index 000000000000..c550cbba7794 --- /dev/null +++ b/.github/services/webdav/nginx_with_password/action.yml @@ -0,0 +1,35 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: nginx_with_password +description: "Behavior test for nginx_with_password in nginx" + +runs: + using: "composite" + steps: + - name: Setup webdav in nginx_with_password + shell: bash + working-directory: fixtures/webdav + run: docker compose -f docker-compose-webdav-with-auth.yml up -d --wait + - name: Setup + shell: bash + run: | + cat << EOF >> $GITHUB_ENV + OPENDAL_WEBDAV_ENDPOINT=http://127.0.0.1:8080 + OPENDAL_WEBDAV_USERNAME=bar + OPENDAL_WEBDAV_PASSWORD=bar + EOF diff --git a/.github/services/webdav/nginx_with_redirect/action.yml b/.github/services/webdav/nginx_with_redirect/action.yml new file mode 100644 index 000000000000..2514964f4d8d --- /dev/null +++ b/.github/services/webdav/nginx_with_redirect/action.yml @@ -0,0 +1,33 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: nginx_with_redirect +description: "Behavior test for nginx_with_redirect in nginx" + +runs: + using: "composite" + steps: + - name: Setup webdav in nginx_with_redirect + shell: bash + working-directory: fixtures/webdav + run: docker compose -f docker-compose-webdav.yml up -d --wait + - name: Setup + shell: bash + run: | + cat << EOF >> $GITHUB_ENV + OPENDAL_WEBDAV_ENDPOINT=http://127.0.0.1:8081 + EOF diff --git a/.github/services/webdav/owncloud/action.yml b/.github/services/webdav/owncloud/action.yml new file mode 100644 index 000000000000..df838bda36fa --- /dev/null +++ b/.github/services/webdav/owncloud/action.yml @@ -0,0 +1,35 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: owncloud +description: "Behavior test for owncloud" + +runs: + using: "composite" + steps: + - name: Setup owncloud + shell: bash + working-directory: fixtures/webdav + run: docker compose -f docker-compose-webdav-owncloud.yml up -d --wait + - name: Setup + shell: bash + run: | + cat << EOF >> $GITHUB_ENV + OPENDAL_WEBDAV_ENDPOINT=http://127.0.0.1:8080/remote.php/webdav/ + OPENDAL_WEBDAV_USERNAME=admin + OPENDAL_WEBDAV_PASSWORD=admin + EOF diff --git a/.github/workflows/service_test_webdav.yml b/.github/workflows/service_test_webdav.yml deleted file mode 100644 index 128932916e14..000000000000 --- a/.github/workflows/service_test_webdav.yml +++ /dev/null @@ -1,224 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -name: Service Test WebDAV - -on: - push: - branches: - - main - pull_request: - branches: - - main - paths: - - "core/src/**" - - "core/tests/**" - - "!core/src/docs/**" - - "!core/src/services/**" - - "core/src/services/webdav/**" - - ".github/workflows/service_test_webdav.yml" - - "fixtures/webdav/**" - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} - cancel-in-progress: true - -jobs: - nginx: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup Rust toolchain - uses: ./.github/actions/setup - with: - need-nextest: true - - - name: Start nginx - shell: bash - working-directory: fixtures/webdav - run: docker compose -f docker-compose-webdav.yml up -d - - - name: Test - shell: bash - working-directory: core - run: cargo nextest run behavior --features tests - env: - OPENDAL_TEST: webdav - OPENDAL_WEBDAV_ENDPOINT: http://127.0.0.1:8080 - - nginx_with_password: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup Rust toolchain - uses: ./.github/actions/setup - with: - need-nextest: true - - - name: Start nginx - shell: bash - working-directory: fixtures/webdav - run: docker compose -f docker-compose-webdav-with-auth.yml up -d - - - name: Test with password - shell: bash - working-directory: core - run: cargo nextest run behavior --features tests - env: - OPENDAL_TEST: webdav - OPENDAL_WEBDAV_ENDPOINT: http://127.0.0.1:8080 - OPENDAL_WEBDAV_USERNAME: bar - OPENDAL_WEBDAV_PASSWORD: bar - - nginx_with_empty_password: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup Rust toolchain - uses: ./.github/actions/setup - with: - need-nextest: true - - - name: Start nginx - shell: bash - working-directory: fixtures/webdav - run: docker compose -f docker-compose-webdav-with-empty-passwd.yml up -d - - - name: Test empty password - shell: bash - working-directory: core - run: cargo nextest run behavior --features tests - env: - OPENDAL_TEST: webdav - OPENDAL_WEBDAV_ENDPOINT: http://127.0.0.1:8080 - OPENDAL_WEBDAV_USERNAME: foo - - nginx_with_redirect: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup Rust toolchain - uses: ./.github/actions/setup - with: - need-nextest: true - - - name: Start nginx - shell: bash - working-directory: fixtures/webdav - run: docker compose -f docker-compose-webdav.yml up -d - - - name: Test with redirect - shell: bash - working-directory: core - run: | - cargo nextest run behavior --features tests - env: - OPENDAL_TEST: webdav - OPENDAL_WEBDAV_ENDPOINT: http://127.0.0.1:8081 - - nextcloud: - runs-on: ubuntu-latest - - services: - nextcloud: - image: nextcloud - ports: - - 8080:80 - env: - SQLITE_DATABASE: nextcloud - NEXTCLOUD_ADMIN_USER: admin - NEXTCLOUD_ADMIN_PASSWORD: admin - REDIS_HOST: redis - options: >- - --health-cmd="curl -f http://localhost" - --health-interval=10s - --health-timeout=5s - --health-retries=5 - - redis: - image: redis - options: >- - --health-cmd "redis-cli ping" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - steps: - - uses: actions/checkout@v4 - - name: Setup Rust toolchain - uses: ./.github/actions/setup - with: - need-nextest: true - - - name: Test - shell: bash - working-directory: core - run: | - cargo test behavior -j=1 - env: - OPENDAL_TEST: webdav - OPENDAL_WEBDAV_ENDPOINT: http://127.0.0.1:8080/remote.php/webdav/ - OPENDAL_WEBDAV_USERNAME: admin - OPENDAL_WEBDAV_PASSWORD: admin - - owncloud: - runs-on: ubuntu-latest - - services: - owncloud: - image: owncloud/server - ports: - - 8080:8080 - env: - ADMIN_USERNAME: admin - ADMIN_PASSWORD: admin - OWNCLOUD_DOMAIN: localhost:8080 - OWNCLOUD_TRUSTED_DOMAINS: localhost - HTTP_PORT: 8080 - OWNCLOUD_REDIS_ENABLED: true - OWNCLOUD_REDIS_HOST: redis - options: >- - --health-cmd "/usr/bin/healthcheck" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - redis: - image: redis - options: >- - --health-cmd "redis-cli ping" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - steps: - - uses: actions/checkout@v4 - - name: Setup Rust toolchain - uses: ./.github/actions/setup - with: - need-nextest: true - - - name: Test - shell: bash - working-directory: core - run: | - cargo test behavior -j=1 - env: - OPENDAL_TEST: webdav - OPENDAL_WEBDAV_ENDPOINT: http://127.0.0.1:8080/remote.php/webdav/ - OPENDAL_WEBDAV_USERNAME: admin - OPENDAL_WEBDAV_PASSWORD: admin diff --git a/fixtures/webdav/docker-compose-webdav-nextcloud.yml b/fixtures/webdav/docker-compose-webdav-nextcloud.yml new file mode 100644 index 000000000000..4cc0312217ac --- /dev/null +++ b/fixtures/webdav/docker-compose-webdav-nextcloud.yml @@ -0,0 +1,39 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +version: '3.8' + +services: + nextcloud: + image: nextcloud + ports: + - "8080:80" + volumes: + - ./health-check-nextcloud.sh:/health-check.sh + environment: + SQLITE_DATABASE: nextcloud + NEXTCLOUD_ADMIN_USER: admin + NEXTCLOUD_ADMIN_PASSWORD: admin + REDIS_HOST: redis + healthcheck: + test: ["CMD-SHELL", "bash", "-c", "/health-check.sh"] + interval: 10s + timeout: 5s + retries: 5 + + redis: + image: redis diff --git a/fixtures/webdav/docker-compose-webdav-owncloud.yml b/fixtures/webdav/docker-compose-webdav-owncloud.yml new file mode 100644 index 000000000000..1a942f4428f7 --- /dev/null +++ b/fixtures/webdav/docker-compose-webdav-owncloud.yml @@ -0,0 +1,45 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +version: '3.8' + +services: + owncloud: + image: owncloud/server + ports: + - "8080:8080" + environment: + ADMIN_USERNAME: admin + ADMIN_PASSWORD: admin + OWNCLOUD_DOMAIN: localhost:8080 + OWNCLOUD_TRUSTED_DOMAINS: localhost + HTTP_PORT: 8080 + OWNCLOUD_REDIS_ENABLED: true + OWNCLOUD_REDIS_HOST: redis + healthcheck: + test: ["CMD", "/usr/bin/healthcheck"] + interval: 10s + timeout: 5s + retries: 5 + + redis: + image: redis + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 diff --git a/fixtures/webdav/health-check-nextcloud.sh b/fixtures/webdav/health-check-nextcloud.sh new file mode 100755 index 000000000000..28cdfaca5794 --- /dev/null +++ b/fixtures/webdav/health-check-nextcloud.sh @@ -0,0 +1,21 @@ +# !/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +set +ex + +curl -sSf 'http://localhost/status.php' | grep '"installed":true' | grep '"maintenance":false' | grep '"needsDbUpgrade":false' || exit 1 \ No newline at end of file