Merge branch 'master' into feature/GH-17459

This commit is contained in:
David Kocher
2026-05-13 09:13:00 +02:00
1856 changed files with 34604 additions and 21046 deletions
+7 -1
View File
@@ -12,7 +12,7 @@ insert_final_newline = true
charset = utf-8-bom
# XML project files
[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj,wixproj,msbuildproj}]
[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj,wixproj,ikvmproj}]
indent_size = 2
# XML config files
@@ -25,6 +25,9 @@ indent_size = 2
[*.{cs,vb}]
dotnet_sort_system_directives_first = true
[*.{cs,vb}]
dotnet_diagnostic.RS0030.severity = error
[*.java]
ij_java_align_consecutive_assignments = false
ij_java_align_consecutive_variable_declarations = false
@@ -290,3 +293,6 @@ ij_java_wrap_first_method_in_call_chain = false
ij_java_wrap_long_lines = false
ij_java_wrap_semicolon_after_call_chain = false
ij_java_continuation_indent_size = 8
[*/Microsoft.Windows.CsWin32.SourceGenerator/*.cs]
generated_code = true
+6 -4
View File
@@ -19,7 +19,7 @@ jobs:
matrix:
os: [ macos-latest, ubuntu-latest, windows-latest ]
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
@@ -32,7 +32,7 @@ jobs:
if: runner.os == 'windows' || runner.os == 'macos'
- run: msiexec /i setup\wix\Bonjour64.msi /Quiet /Passive /NoRestart
if: runner.os == 'windows'
- uses: microsoft/setup-msbuild@v2
- uses: microsoft/setup-msbuild@v3
if: runner.os == 'windows'
with:
msbuild-architecture: x64
@@ -46,5 +46,7 @@ jobs:
- name: Build with Maven
run: mvn --no-transfer-progress verify -DskipITs -DskipSign ${{ env.args }} --batch-mode -Drevision=0
- name: Publish Test Report
if: ${{ always() }}
uses: scacap/action-surefire-report@v1.9.1
if: github.event.pull_request.head.repo.fork == false
uses: ScalableCapital/action-surefire-report@v2
with:
check_name: Test Report (${{ matrix.os }})
+9 -4
View File
@@ -2,19 +2,22 @@ name: Integration Tests
on:
workflow_dispatch:
schedule:
- cron: '0 2 * * *'
jobs:
build:
permissions:
checks: write
statuses: write
contents: read
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest ]
os: [ linux-self-hosted, macos-self-hosted, windows-self-hosted ]
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
@@ -24,7 +27,9 @@ jobs:
- name: Build with Maven
env:
VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }}
run: mvn verify -pl protocols -am --no-transfer-progress --batch-mode --fail-at-end -Denforcer.skip
run: mvn verify -pl protocols -am --no-transfer-progress --batch-mode --fail-at-end -D"enforcer.skip"
- name: Publish Test Report
if: ${{ always() }}
uses: scacap/action-surefire-report@v1.9.1
uses: ScalableCapital/action-surefire-report@v2
with:
check_name: Test Report (${{ matrix.os }})
+5 -5
View File
@@ -16,7 +16,7 @@ jobs:
matrix:
os: [ macos-latest, ubuntu-latest, windows-latest ]
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up JDK
@@ -27,7 +27,7 @@ jobs:
cache: maven
- name: Add msbuild to PATH
if: ${{ runner.os == 'Windows' }}
uses: microsoft/setup-msbuild@v2
uses: microsoft/setup-msbuild@v3
with:
msbuild-architecture: x64
- name: "NuGet"
@@ -39,17 +39,17 @@ jobs:
echo "NuGetPackageSourceCredentials_gh-iterate-ch=${{ env.NugetCredentials }}" >> $env:GITHUB_ENV
- name: Install Bonjour SDK
if: ${{ runner.os == 'Windows' }}
uses: crazy-max/ghaction-chocolatey@v3
uses: crazy-max/ghaction-chocolatey@v4
with:
args: install bonjour -y
- name: Install WiX Toolset
if: ${{ runner.os == 'Windows' }}
uses: crazy-max/ghaction-chocolatey@v3
uses: crazy-max/ghaction-chocolatey@v4
with:
args: install wixtoolset -y
- name: Install OpenSSL
if: ${{ runner.os == 'Windows' }}
uses: crazy-max/ghaction-chocolatey@v3
uses: crazy-max/ghaction-chocolatey@v4
with:
args: install openssl -y
- name: Build with Maven
+4 -4
View File
@@ -39,7 +39,7 @@ jobs:
run: echo "Checkout $TAG"
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
@@ -53,7 +53,7 @@ jobs:
java-version: 21
cache: maven
- name: checkout
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: ${{ env.TAG }}
fetch-depth: 0
@@ -62,13 +62,13 @@ jobs:
mvn -B verify --projects cli/linux --also-make -DskipTests
dpkg-deb -R cli/linux/target/release/duck_${{env.VERSION}}.$COUNT_amd64.deb .
- name: Log in to the Container registry
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
env:
DOCKER_BUILDKIT: 1
with:
+2 -2
View File
@@ -16,7 +16,7 @@ jobs:
working-directory: ./i18n/src/main/resources
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
persist-credentials: false
fetch-depth: 0
@@ -29,7 +29,7 @@ jobs:
TX_HOSTNAME: ${{ secrets.TRANSIFEX_HOSTNAME }}
TX_TOKEN: ${{ secrets.TRANSIFEX_TOKEN }}
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
uses: peter-evans/create-pull-request@v8
if: success()
with:
branch: i18n/
+34 -2
View File
@@ -1,4 +1,36 @@
# Changelog
[9.5.0](https://github.com/iterate-ch/cyberduck/compare/release-9-4-1...release-9-5-0)
* [Feature] AWS IAM Identity Center Support (S3) ([#13377](https://trac.cyberduck.io/ticket/13377))
* [Feature] Connect with credentials from `credential_process` configuration directive in ~/.aws (S3) ([#11664](https://trac.cyberduck.io/ticket/11664))
* [Feature] Add preference to include previous versions of files in browser (S3) ([#18020](https://trac.cyberduck.io/ticket/18020))
* [Feature] Retrieve credentials from instance metadata using IMDSv2 (S3) ([#16104](https://trac.cyberduck.io/ticket/16104))
* [Feature] Disable versioned listing by default (S3) ([#18031](https://trac.cyberduck.io/ticket/18031))
* [Feature] Add option in Preferences to enable versioned listing (S3) ([#18031](https://trac.cyberduck.io/ticket/18031))
* [Bugfix] Error downloading file from unlocked vault (Cryptomator) ([#17935](https://trac.cyberduck.io/ticket/17935))
* [Bugfix] No trailing delimiter for path style requests with bucket name only ([#17901](https://trac.cyberduck.io/ticket/17901))
* [Bugfix] Repeating file transfer in vault fails after restart (Cryptomator) ([#17974](https://trac.cyberduck.io/ticket/17974))
* [Bugfix] Do not write file header to placeholder files for folders (Cryptomator, Mega.nz S4)
* [Bugfix] Remove /Default symbolic link (Sharepoint) ([#17918](https://trac.cyberduck.io/ticket/17918))
* [Bugfix] Map all SSL failures to network error and await server response on control connection (FTP) ([#17946](https://trac.cyberduck.io/ticket/17946))
* [Bugfix] Browser window does not show up in Exposé & Mission Control (macOS) ([#17703](https://trac.cyberduck.io/ticket/17703))
* [Bugfix] Compare public key blob instead of comment when retrieving key from agent (SFTP)
* [Bugfix] Support "Include" directive when reading from OpenSSH config (SFTP) ([#10451](https://trac.cyberduck.io/ticket/10451))
[9.4.1](https://github.com/iterate-ch/cyberduck/compare/release-9-4-0...release-9-4-1)
* [Bugfix] Cleartext uploads to unlocked vault with auto detect disabled in Preferences (
Cryptomator) ([#17893](https://trac.cyberduck.io/ticket/17893))
* [Bugfix] Unable to lock vault (Cryptomator) ([#17892](https://trac.cyberduck.io/ticket/17892))
[9.4.0](https://github.com/iterate-ch/cyberduck/compare/release-9-3-1...release-9-4-0)
* [Feature] Rewrite protocol implementation (iRODS)
* [Bugfix] Do not preemptively save OAuth tokens with no username (Box, Dropbox, Google Drive, Google Storage, OneDrive)
* [Bugfix] Fail when reading private key for selected certificate fails (WebDAV)
* [Bugfix] Validate jumphost configuration on connect (SFTP)
* [Bugfix] Include context path in presigned URLs (S3)
* [Bugfix] Previous file versions missing in Info → Versions (Dropbox)
[9.3.1](https://github.com/iterate-ch/cyberduck/compare/release-9-3-0...release-9-3-1)
* [Bugfix] Validate tokens when using AWS S3 CLI connection profile (#17690)
[9.3.0](https://github.com/iterate-ch/cyberduck/compare/release-9-2-4...release-9-3-0)
* [Feature] Rewrite protocol implementation (Azure) ([#15967](https://trac.cyberduck.io/ticket/15967))
@@ -70,8 +102,8 @@
[9.1.3](https://github.com/iterate-ch/cyberduck/compare/release-9-1-2...release-9-1-3)
* [Bugfix] Invalid progress in Finder transferring multiple files (macOS) ([#16738](https://trac.cyberduck.io/ticket/16738))
* [Bugfix] Diasble lookup of vaults by default. Must explicitly specify --vault (Cyptomator, CLI)
* [Bugfix] Duplicate file menu item always disabled (FTP) ([#16798](https://github.com/iterate-ch/cyberduck/issues/16798))
* [Bugfix] Allow OAuth configuration in connection profiles (WebDAV) ([#16792](https://github.com/iterate-ch/cyberduck/issues/16792))
* [Bugfix] Duplicate file menu item always disabled (FTP) ([#16798](https://trac.cyberduck.io/ticket/16798))
* [Bugfix] Allow OAuth configuration in connection profiles (WebDAV) ([#16792](https://trac.cyberduck.io/ticket/16792))
[9.1.2](https://github.com/iterate-ch/cyberduck/compare/release-9-1-1...release-9-1-2)
* [Bugfix] No fallback to IPv4 address when IPv6 connect attempt fails with unreachable network ([#16723](https://trac.cyberduck.io/ticket/16723))
+85 -89
View File
@@ -1,7 +1,28 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31825.309
# Visual Studio Version 18
VisualStudioVersion = 18.2.11415.280
MinimumVisualStudioVersion = 15.0.26124.0
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8B08EF96-10D6-4F35-94C1-986F9F0F1506}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libs", "libs", "{72B4BA09-65D8-4C49-930E-B14104B2AB1B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "installer", "installer", "{0DF59FB4-AEA9-4213-A935-6DB851411B67}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "duck", "duck", "{457F1D6D-8AEC-42E2-9211-2A8405C95019}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cyberduck", "Cyberduck", "{7D32EE61-B6F0-4978-B500-45172B181283}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B9726AB9-4100-4499-A9CF-78167CC27024}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
Directory.Build.props = Directory.Build.props
Directory.Build.targets = Directory.Build.targets
Directory.Packages.props = Directory.Packages.props
global.json = global.json
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core.Native", "core\src\main\csharp\Cyberduck.Core.Native.csproj", "{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Bonjour.Native", "bonjour\src\main\csharp\Cyberduck.Bonjour.Native.csproj", "{1926AB55-690C-4081-99D5-170847C206D9}"
@@ -10,58 +31,37 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core.Test", "core
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "duck", "cli\src\main\csharp\duck.csproj", "{2287E64E-3515-4324-9833-553348295C15}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8B08EF96-10D6-4F35-94C1-986F9F0F1506}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libs", "libs", "{72B4BA09-65D8-4C49-930E-B14104B2AB1B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck", "windows\src\main\csharp\Cyberduck.csproj", "{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Test", "windows\src\test\csharp\Cyberduck.Test.csproj", "{B5565834-1164-4858-AF50-AE89CFC9BDD2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "installer", "installer", "{0DF59FB4-AEA9-4213-A935-6DB851411B67}"
Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "Cyberduck.Bootstrapper", "windows\src\main\wix\Bootstrapper\Cyberduck.Bootstrapper.wixproj", "{00858CE5-437F-46BE-8A2E-519B552DBF7D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "duck", "duck", "{457F1D6D-8AEC-42E2-9211-2A8405C95019}"
Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "Cyberduck.Bundle", "windows\src\main\wix\Bundle\Cyberduck.Bundle.wixproj", "{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cyberduck", "Cyberduck", "{7D32EE61-B6F0-4978-B500-45172B181283}"
Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "duck.bootstrapper", "cli\src\main\wix\Bootstrapper\duck.bootstrapper.wixproj", "{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WindowsVersionCustomAction", "windows\src\main\wix\WindowsVersionCustomAction\WindowsVersionCustomAction.vcxproj", "{FBA5EFE2-362B-4BAD-A748-3248F79468AC}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Cyberduck.Bootstrapper", "windows\src\main\wix\Bootstrapper\Cyberduck.Bootstrapper.wixproj", "{00858CE5-437F-46BE-8A2E-519B552DBF7D}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Cyberduck.Bundle", "windows\src\main\wix\Bundle\Cyberduck.Bundle.wixproj", "{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "duck.bootstrapper", "cli\src\main\wix\Bootstrapper\duck.bootstrapper.wixproj", "{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "duck.bundle", "cli\src\main\wix\Bundle\duck.bundle.wixproj", "{F6975079-F730-4A31-9909-DE536E524764}"
Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "duck.bundle", "cli\src\main\wix\Bundle\duck.bundle.wixproj", "{F6975079-F730-4A31-9909-DE536E524764}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core.Refresh", "core\native\refresh\src\main\csharp\Cyberduck.Core.Refresh.csproj", "{D1286C4A-9D6A-4904-B9AD-CB7688483EDB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B9726AB9-4100-4499-A9CF-78167CC27024}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
Directory.Build.props = Directory.Build.props
Directory.Build.targets = Directory.Build.targets
global.json = global.json
Packages.props = Packages.props
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "i18n-gen", "core\i18n-gen\i18n-gen.csproj", "{ABB0D3AD-BCDA-4F73-88C3-C67B76AAB6FE}"
EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "package", "windows\src\main\package\package.wapproj", "{55CDD736-9A8A-4091-AC99-60E2F9C73269}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core", "core\dll\Cyberduck.Core.msbuildproj", "{1B4DFDAD-C676-4338-B435-F2F62D79E096}"
Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Core", "core\dll\Cyberduck.Core.ikvmproj", "{1B4DFDAD-C676-4338-B435-F2F62D79E096}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Bonjour", "bonjour\dll\Cyberduck.Bonjour.msbuildproj", "{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}"
Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Bonjour", "bonjour\dll\Cyberduck.Bonjour.ikvmproj", "{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Importer", "importer\dll\Cyberduck.Importer.msbuildproj", "{C9B1C169-1354-4348-9938-7892399C6336}"
Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Importer", "importer\dll\Cyberduck.Importer.ikvmproj", "{C9B1C169-1354-4348-9938-7892399C6336}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Protocols", "protocols\dll\Cyberduck.Protocols.msbuildproj", "{9C7B827F-AE30-44C4-A210-E49DF883C720}"
Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Protocols", "protocols\dll\Cyberduck.Protocols.ikvmproj", "{9C7B827F-AE30-44C4-A210-E49DF883C720}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Cryptomator", "cryptomator\dll\Cyberduck.Cryptomator.msbuildproj", "{7EFC0398-8F4D-4850-BBE3-A0CC85410559}"
Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Cryptomator", "cryptomator\dll\Cyberduck.Cryptomator.ikvmproj", "{7EFC0398-8F4D-4850-BBE3-A0CC85410559}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Cli", "cli\dll\Cyberduck.Cli.msbuildproj", "{2D33598A-21A1-4117-82DC-250F4CE8D5E5}"
Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Cli", "cli\dll\Cyberduck.Cli.ikvmproj", "{2D33598A-21A1-4117-82DC-250F4CE8D5E5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "test-utils", "windows\src\test\utils\test-utils.csproj", "{BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -69,18 +69,6 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1B4DFDAD-C676-4338-B435-F2F62D79E096}.Debug|x64.ActiveCfg = Debug|Any CPU
{1B4DFDAD-C676-4338-B435-F2F62D79E096}.Debug|x64.Build.0 = Debug|Any CPU
{1B4DFDAD-C676-4338-B435-F2F62D79E096}.Release|x64.ActiveCfg = Release|Any CPU
{1B4DFDAD-C676-4338-B435-F2F62D79E096}.Release|x64.Build.0 = Release|Any CPU
{2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Debug|x64.ActiveCfg = Debug|Any CPU
{2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Debug|x64.Build.0 = Debug|Any CPU
{2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Release|x64.ActiveCfg = Release|Any CPU
{2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Release|x64.Build.0 = Release|Any CPU
{7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Debug|x64.ActiveCfg = Debug|Any CPU
{7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Debug|x64.Build.0 = Debug|Any CPU
{7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Release|x64.ActiveCfg = Release|Any CPU
{7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Release|x64.Build.0 = Release|Any CPU
{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766}.Debug|x64.ActiveCfg = Debug|x64
{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766}.Debug|x64.Build.0 = Debug|x64
{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766}.Release|x64.ActiveCfg = Release|x64
@@ -101,42 +89,22 @@ Global
{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|x64.Build.0 = Debug|x64
{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|x64.ActiveCfg = Release|x64
{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|x64.Build.0 = Release|x64
{9C7B827F-AE30-44C4-A210-E49DF883C720}.Debug|x64.ActiveCfg = Debug|Any CPU
{9C7B827F-AE30-44C4-A210-E49DF883C720}.Debug|x64.Build.0 = Debug|Any CPU
{9C7B827F-AE30-44C4-A210-E49DF883C720}.Release|x64.ActiveCfg = Release|Any CPU
{9C7B827F-AE30-44C4-A210-E49DF883C720}.Release|x64.Build.0 = Release|Any CPU
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Debug|x64.ActiveCfg = Debug|Any CPU
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Debug|x64.Build.0 = Debug|Any CPU
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Release|x64.ActiveCfg = Release|Any CPU
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Release|x64.Build.0 = Release|Any CPU
{B5565834-1164-4858-AF50-AE89CFC9BDD2}.Debug|x64.ActiveCfg = Debug|x64
{B5565834-1164-4858-AF50-AE89CFC9BDD2}.Debug|x64.Build.0 = Debug|x64
{B5565834-1164-4858-AF50-AE89CFC9BDD2}.Release|x64.ActiveCfg = Release|x64
{B5565834-1164-4858-AF50-AE89CFC9BDD2}.Release|x64.Build.0 = Release|x64
{C9B1C169-1354-4348-9938-7892399C6336}.Debug|x64.ActiveCfg = Debug|Any CPU
{C9B1C169-1354-4348-9938-7892399C6336}.Debug|x64.Build.0 = Debug|Any CPU
{C9B1C169-1354-4348-9938-7892399C6336}.Release|x64.ActiveCfg = Release|Any CPU
{C9B1C169-1354-4348-9938-7892399C6336}.Release|x64.Build.0 = Release|Any CPU
{FBA5EFE2-362B-4BAD-A748-3248F79468AC}.Debug|x64.ActiveCfg = Debug|Win32
{FBA5EFE2-362B-4BAD-A748-3248F79468AC}.Debug|x64.Build.0 = Debug|Win32
{FBA5EFE2-362B-4BAD-A748-3248F79468AC}.Release|x64.ActiveCfg = Release|Win32
{FBA5EFE2-362B-4BAD-A748-3248F79468AC}.Release|x64.Build.0 = Release|Win32
{00858CE5-437F-46BE-8A2E-519B552DBF7D}.Debug|x64.ActiveCfg = Debug|x86
{00858CE5-437F-46BE-8A2E-519B552DBF7D}.Debug|x64.Build.0 = Debug|x86
{00858CE5-437F-46BE-8A2E-519B552DBF7D}.Release|x64.ActiveCfg = Release|x86
{00858CE5-437F-46BE-8A2E-519B552DBF7D}.Release|x64.Build.0 = Release|x86
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Debug|x64.ActiveCfg = Debug|x86
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Debug|x64.Build.0 = Debug|x86
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Release|x64.ActiveCfg = Release|x86
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Release|x64.Build.0 = Release|x86
{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x64.ActiveCfg = Debug|x86
{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x64.Build.0 = Debug|x86
{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x64.ActiveCfg = Release|x86
{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x64.Build.0 = Release|x86
{F6975079-F730-4A31-9909-DE536E524764}.Debug|x64.ActiveCfg = Debug|x86
{F6975079-F730-4A31-9909-DE536E524764}.Debug|x64.Build.0 = Debug|x86
{F6975079-F730-4A31-9909-DE536E524764}.Release|x64.ActiveCfg = Release|x86
{F6975079-F730-4A31-9909-DE536E524764}.Release|x64.Build.0 = Release|x86
{00858CE5-437F-46BE-8A2E-519B552DBF7D}.Debug|x64.ActiveCfg = Debug|x64
{00858CE5-437F-46BE-8A2E-519B552DBF7D}.Debug|x64.Build.0 = Debug|x64
{00858CE5-437F-46BE-8A2E-519B552DBF7D}.Release|x64.ActiveCfg = Release|x64
{00858CE5-437F-46BE-8A2E-519B552DBF7D}.Release|x64.Build.0 = Release|x64
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Debug|x64.ActiveCfg = Debug|x64
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Debug|x64.Build.0 = Debug|x64
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Release|x64.ActiveCfg = Release|x64
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Release|x64.Build.0 = Release|x64
{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x64.ActiveCfg = Debug|x64
{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x64.ActiveCfg = Release|x64
{F6975079-F730-4A31-9909-DE536E524764}.Debug|x64.ActiveCfg = Debug|x64
{F6975079-F730-4A31-9909-DE536E524764}.Release|x64.ActiveCfg = Release|x64
{D1286C4A-9D6A-4904-B9AD-CB7688483EDB}.Debug|x64.ActiveCfg = Debug|x64
{D1286C4A-9D6A-4904-B9AD-CB7688483EDB}.Debug|x64.Build.0 = Debug|x64
{D1286C4A-9D6A-4904-B9AD-CB7688483EDB}.Release|x64.ActiveCfg = Release|x64
@@ -151,27 +119,48 @@ Global
{55CDD736-9A8A-4091-AC99-60E2F9C73269}.Release|x64.ActiveCfg = Release|x64
{55CDD736-9A8A-4091-AC99-60E2F9C73269}.Release|x64.Build.0 = Release|x64
{55CDD736-9A8A-4091-AC99-60E2F9C73269}.Release|x64.Deploy.0 = Release|x64
{1B4DFDAD-C676-4338-B435-F2F62D79E096}.Debug|x64.ActiveCfg = Debug|Any CPU
{1B4DFDAD-C676-4338-B435-F2F62D79E096}.Debug|x64.Build.0 = Debug|Any CPU
{1B4DFDAD-C676-4338-B435-F2F62D79E096}.Release|x64.ActiveCfg = Release|Any CPU
{1B4DFDAD-C676-4338-B435-F2F62D79E096}.Release|x64.Build.0 = Release|Any CPU
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Debug|x64.ActiveCfg = Debug|Any CPU
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Debug|x64.Build.0 = Debug|Any CPU
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Release|x64.ActiveCfg = Release|Any CPU
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Release|x64.Build.0 = Release|Any CPU
{C9B1C169-1354-4348-9938-7892399C6336}.Debug|x64.ActiveCfg = Debug|Any CPU
{C9B1C169-1354-4348-9938-7892399C6336}.Debug|x64.Build.0 = Debug|Any CPU
{C9B1C169-1354-4348-9938-7892399C6336}.Release|x64.ActiveCfg = Release|Any CPU
{C9B1C169-1354-4348-9938-7892399C6336}.Release|x64.Build.0 = Release|Any CPU
{9C7B827F-AE30-44C4-A210-E49DF883C720}.Debug|x64.ActiveCfg = Debug|Any CPU
{9C7B827F-AE30-44C4-A210-E49DF883C720}.Debug|x64.Build.0 = Debug|Any CPU
{9C7B827F-AE30-44C4-A210-E49DF883C720}.Release|x64.ActiveCfg = Release|Any CPU
{9C7B827F-AE30-44C4-A210-E49DF883C720}.Release|x64.Build.0 = Release|Any CPU
{7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Debug|x64.ActiveCfg = Debug|Any CPU
{7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Debug|x64.Build.0 = Debug|Any CPU
{7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Release|x64.ActiveCfg = Release|Any CPU
{7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Release|x64.Build.0 = Release|Any CPU
{2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Debug|x64.ActiveCfg = Debug|Any CPU
{2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Debug|x64.Build.0 = Debug|Any CPU
{2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Release|x64.ActiveCfg = Release|Any CPU
{2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Release|x64.Build.0 = Release|Any CPU
{BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}.Debug|x64.ActiveCfg = Debug|Any CPU
{BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}.Debug|x64.Build.0 = Debug|Any CPU
{BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}.Release|x64.ActiveCfg = Release|Any CPU
{BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{1B4DFDAD-C676-4338-B435-F2F62D79E096} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{2D33598A-21A1-4117-82DC-250F4CE8D5E5} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{7EFC0398-8F4D-4850-BBE3-A0CC85410559} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{72B4BA09-65D8-4C49-930E-B14104B2AB1B} = {3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}
{457F1D6D-8AEC-42E2-9211-2A8405C95019} = {0DF59FB4-AEA9-4213-A935-6DB851411B67}
{7D32EE61-B6F0-4978-B500-45172B181283} = {0DF59FB4-AEA9-4213-A935-6DB851411B67}
{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{1926AB55-690C-4081-99D5-170847C206D9} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{581C7683-D22D-4346-B3BF-DC2936231C46} = {8B08EF96-10D6-4F35-94C1-986F9F0F1506}
{2287E64E-3515-4324-9833-553348295C15} = {3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}
{72B4BA09-65D8-4C49-930E-B14104B2AB1B} = {3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}
{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30} = {3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}
{9C7B827F-AE30-44C4-A210-E49DF883C720} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{B5565834-1164-4858-AF50-AE89CFC9BDD2} = {8B08EF96-10D6-4F35-94C1-986F9F0F1506}
{457F1D6D-8AEC-42E2-9211-2A8405C95019} = {0DF59FB4-AEA9-4213-A935-6DB851411B67}
{7D32EE61-B6F0-4978-B500-45172B181283} = {0DF59FB4-AEA9-4213-A935-6DB851411B67}
{C9B1C169-1354-4348-9938-7892399C6336} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{FBA5EFE2-362B-4BAD-A748-3248F79468AC} = {7D32EE61-B6F0-4978-B500-45172B181283}
{00858CE5-437F-46BE-8A2E-519B552DBF7D} = {7D32EE61-B6F0-4978-B500-45172B181283}
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85} = {7D32EE61-B6F0-4978-B500-45172B181283}
{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04} = {457F1D6D-8AEC-42E2-9211-2A8405C95019}
@@ -179,6 +168,13 @@ Global
{D1286C4A-9D6A-4904-B9AD-CB7688483EDB} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{ABB0D3AD-BCDA-4F73-88C3-C67B76AAB6FE} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{55CDD736-9A8A-4091-AC99-60E2F9C73269} = {7D32EE61-B6F0-4978-B500-45172B181283}
{1B4DFDAD-C676-4338-B435-F2F62D79E096} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{B31E6C36-D710-443F-8ED7-16BE3BD51FC4} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{C9B1C169-1354-4348-9938-7892399C6336} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{9C7B827F-AE30-44C4-A210-E49DF883C720} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{7EFC0398-8F4D-4850-BBE3-A0CC85410559} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{2D33598A-21A1-4117-82DC-250F4CE8D5E5} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0} = {8B08EF96-10D6-4F35-94C1-986F9F0F1506}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {289E6003-15D5-4377-ADA6-2E7093785BCD}
+2 -29
View File
@@ -16,38 +16,11 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="AssemblyInfo">
<Company>iterate GmbH</Company>
<Description>Libre FTP, SFTP, WebDAV, S3 and OpenStack Swift browser for Mac and Windows.</Description>
</PropertyGroup>
<PropertyGroup>
<CyberduckDir>$(MSBuildThisFileDirectory)</CyberduckDir>
<BuildSupportDir>$(CyberduckDir)src\main\msbuild\</BuildSupportDir>
<TargetBuildDir>$(ModulePath)target\</TargetBuildDir>
<LibDir>$(TargetBuildDir)lib\</LibDir>
<GeneratedMSBuildDir>$(TargetBuildDir)generated\msbuild\</GeneratedMSBuildDir>
<ArtifactsPath>$(TargetBuildDir)</ArtifactsPath>
<UseArtifactsOutput>false</UseArtifactsOutput>
<BaseIntermediateOutputPath>$(ArtifactsPath)obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
<BaseOutputPath>$(ArtifactsPath)</BaseOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<OutputPath>$(BaseOutputPath)</OutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<LangVersion>12</LangVersion>
<BuildProjectReferences Condition=" '$(BuildProjectReferences)'=='' And '$(BuildingInsideVisualStudio)'!='True' ">false</BuildProjectReferences>
</PropertyGroup>
<ItemDefinitionGroup>
<CyberduckReference>
<ProjectPath />
</CyberduckReference>
</ItemDefinitionGroup>
<Import Project="$(GeneratedMSBuildDir)Version.props" Condition="Exists('$(GeneratedMSBuildDir)Version.props')" />
<Import Project="$(BuildSupportDir)Cyberduck.Default.props" />
</Project>
</Project>
+1 -79
View File
@@ -16,84 +16,6 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Sdk Name="Microsoft.Build.CentralPackageVersions" Version="2.0.41" />
<PropertyGroup>
<AssemblySearchPaths>$(LibDir);$(AssemblySearchPaths)</AssemblySearchPaths>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' != '' ">
<LibDirFramework Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net472'))">net472</LibDirFramework>
<LibDirFramework Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">net8.0</LibDirFramework>
<AssemblySearchPaths Condition=" '$(LibDirFramework)' != '' ">$(LibDir)$(LibDirFramework)\;$(AssemblySearchPaths)</AssemblySearchPaths>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' != 'net472' ">
<DefaultItemExcludes>$(DefaultItemExcludes);**/*net472*</DefaultItemExcludes>
</PropertyGroup>
<PropertyGroup Condition=" !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0')) ">
<DefaultItemExcludes>$(DefaultItemExcludes);**/*net8.0*</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
<CyberduckReference Update="Bonjour">
<ProjectPath>$(CyberduckDir)bonjour\dll\Cyberduck.Bonjour.msbuildproj</ProjectPath>
</CyberduckReference>
<CyberduckReference Update="Bonjour.Native">
<ProjectPath>$(CyberduckDir)bonjour\src\main\csharp\Cyberduck.Bonjour.Native.csproj</ProjectPath>
</CyberduckReference>
<CyberduckReference Update="Cli">
<ProjectPath>$(CyberduckDir)cli\dll\Cyberduck.Cli.msbuildproj</ProjectPath>
</CyberduckReference>
<CyberduckReference Update="Core">
<ProjectPath>$(CyberduckDir)core\dll\Cyberduck.Core.msbuildproj</ProjectPath>
</CyberduckReference>
<CyberduckReference Update="Core.Native">
<ProjectPath>$(CyberduckDir)core\src\main\csharp\Cyberduck.Core.Native.csproj</ProjectPath>
</CyberduckReference>
<CyberduckReference Update="Core.Refresh">
<ProjectPath>$(CyberduckDir)core\native\refresh\src\main\csharp\Cyberduck.Core.Refresh.csproj</ProjectPath>
</CyberduckReference>
<CyberduckReference Update="Cryptomator">
<ProjectPath>$(CyberduckDir)cryptomator\dll\Cyberduck.Cryptomator.msbuildproj</ProjectPath>
</CyberduckReference>
<CyberduckReference Update="Importer">
<ProjectPath>$(CyberduckDir)importer\dll\Cyberduck.Importer.msbuildproj</ProjectPath>
</CyberduckReference>
<CyberduckReference Update="Protocols">
<ProjectPath>$(CyberduckDir)protocols\dll\Cyberduck.Protocols.msbuildproj</ProjectPath>
</CyberduckReference>
<CyberduckProjectReference Include="@(CyberduckReference->HasMetadata('ProjectPath'))" Condition=" '$(BuildingInsideVisualStudio)'=='true' Or '$(BuildProjectReferences)'!='false' " />
<CyberduckAssemblyReference Include="@(CyberduckReference)" Exclude="@(CyberduckProjectReference)" />
<ProjectReference Include="@(CyberduckProjectReference->'%(ProjectPath)')">
<Name>Cyberduck.%(Identity)</Name>
</ProjectReference>
<Reference Include="@(CyberduckAssemblyReference->'Cyberduck.%(Identity)')">
<JavaClasspath>\\?\</JavaClasspath>
</Reference>
</ItemGroup>
<PropertyGroup>
<!-- Fix .NET 8 Sdk RuntimeIdentifiers to align with .NET 9 Sdk -->
<RuntimeIdentifier Condition=" '$(RuntimeIdentifier)'=='win7-x86'">win-x86</RuntimeIdentifier>
<RuntimeIdentifier Condition=" '$(RuntimeIdentifier)'=='win7-x64'">win-x64</RuntimeIdentifier>
</PropertyGroup>
<PropertyGroup Condition=" '$(NETCoreSdkVersion)'!='' ">
<!-- Treat SDK 6.0.301 as last known to work. -->
<NETSDKBeforeFeature>$([MSBuild]::VersionLessThanOrEquals('$(NETCoreSdkVersion)', '6.0.301'))</NETSDKBeforeFeature>
<NETSDKAfterFix>$([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '6.0.401'))</NETSDKAfterFix>
<CoreCompileDependsOn Condition="!($(NETSDKBeforeFeature) or $(NETSDKAfterFix))">SDKFix_RemoveDuplicateAnalyzers;$(CoreCompileDependsOn)</CoreCompileDependsOn>
</PropertyGroup>
<Target Name="SDKFix_RemoveDuplicateAnalyzers">
<ItemGroup>
<FilteredAnalyzer Include="@(Analyzer-&gt;Distinct())" />
<Analyzer Remove="@(Analyzer)" />
<Analyzer Include="@(FilteredAnalyzer)" />
<FilteredAnalyzer Remove="@(FilteredAnalyzer)" />
</ItemGroup>
</Target>
<Import Project="$(BuildSupportDir)Cyberduck.Default.targets" />
</Project>
+60
View File
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (c) 2002-2019 iterate GmbH. All rights reserved.
~ https://cyberduck.io/
~
~ This program is free software; you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.2.2" />
<PackageVersion Include="DotNetProjects.Extended.Wpf.Toolkit" Version="5.0.100" />
<PackageVersion Include="ExceptionReporter " Version="2.4.2" />
<PackageVersion Include="IKVM" Version="8.13.3" />
<PackageVersion Include="iterate-ch.IKVM.MSBuild.SkipDuplicates" Version="1.1.0" />
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="17.1.0" />
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageVersion Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
<PackageVersion Include="Microsoft.Windows.CsWin32" Version="0.3.106" />
<PackageVersion Include="Microsoft.Windows.SDK.Contracts" Version="10.0.22000.196" />
<PackageVersion Include="NUnit" Version="4.2.0" />
<PackageVersion Include="NUnit.Console" Version="3.17.0" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageVersion Include="ObjectListView.Official" Version="2.9.1" />
<PackageVersion Include="ReactiveMarbles.ObservableEvents.SourceGenerator" Version="1.2.3" />
<PackageVersion Include="ReactiveUI" Version="17.1.50" />
<PackageVersion Include="ReactiveUI.WPF" Version="17.1.50" />
<PackageVersion Include="StructureMap" Version="2.6.4.1" />
<PackageVersion Include="System.CommandLine" Version="2.0.3" />
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="8.0.0" />
<PackageVersion Include="System.Memory" Version="4.5.5" />
<PackageVersion Include="System.Runtime.Caching" Version="8.0.0" />
<PackageVersion Include="System.Security.Cryptography.ProtectedData" Version="8.0.0" />
<PackageVersion Include="WixToolset.Bal.wixext" Version="5.0.2" />
<PackageVersion Include="WixToolset.Heat" Version="5.0.2" />
<PackageVersion Include="WixToolset.NetFx.wixext" Version="5.0.2" />
<PackageVersion Include="WixToolset.Util.wixext" Version="5.0.2" />
</ItemGroup>
<ItemGroup>
<GlobalPackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="3.3.4" />
</ItemGroup>
<PropertyGroup>
<PackageVersions>@(PackageVersion->'%(Identity)'->Replace('.', '_')->'Pkg%(Identity)Version=%(Version)')</PackageVersions>
</PropertyGroup>
</Project>
-45
View File
@@ -1,45 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (c) 2002-2019 iterate GmbH. All rights reserved.
~ https://cyberduck.io/
~
~ This program is free software; you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PackageReference Update="CommunityToolkit.Mvvm" Version="8.2.2" />
<PackageReference Update="DotNetProjects.Extended.Wpf.Toolkit" Version="5.0.100" />
<PackageReference Update="ExceptionReporter " Version="2.4.2" />
<PackageReference Update="IKVM" Version="8.13.3" />
<PackageReference Update="iterate-ch.IKVM.MSBuild.SkipDuplicates" Version="1.1.0" />
<PackageReference Update="Microsoft.Build.Utilities.Core" Version="17.1.0" />
<PackageReference Update="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Update="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Update="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
<PackageReference Update="Microsoft.Windows.CsWin32" Version="0.3.106" />
<PackageReference Update="Microsoft.Windows.SDK.Contracts" Version="10.0.22000.196" />
<PackageReference Update="NUnit" Version="4.2.0" />
<PackageReference Update="NUnit.Console" Version="3.20.0" />
<PackageReference Update="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Update="ObjectListView.Official" Version="2.9.1" />
<PackageReference Update="ReactiveMarbles.ObservableEvents.SourceGenerator" Version="1.2.3" />
<PackageReference Update="ReactiveUI" Version="17.1.50" />
<PackageReference Update="ReactiveUI.WPF" Version="17.1.50" />
<PackageReference Update="StructureMap" Version="2.6.4.1" />
<PackageReference Update="System.Configuration.ConfigurationManager" Version="8.0.0" />
<PackageReference Update="System.Memory" Version="4.5.5" />
<PackageReference Update="System.Runtime.Caching" Version="8.0.0" />
<PackageReference Update="System.Security.Cryptography.ProtectedData" Version="8.0.0" />
<GlobalPackageReference Include="MSBuildTasks" Version="1.5.0.235" GeneratePathProperty="true" />
</ItemGroup>
</Project>
+2 -2
View File
@@ -18,11 +18,11 @@
<parent>
<groupId>ch.cyberduck</groupId>
<artifactId>parent</artifactId>
<version>9.3.0-SNAPSHOT</version>
<version>9.5.0-SNAPSHOT</version>
</parent>
<artifactId>azure</artifactId>
<properties>
<azure-storage-version>12.32.0</azure-storage-version>
<azure-storage-version>12.33.4</azure-storage-version>
</properties>
<dependencies>
@@ -16,6 +16,7 @@ package ch.cyberduck.core.azure;
*/
import ch.cyberduck.core.CancellingListProgressListener;
import ch.cyberduck.core.DefaultPathAttributes;
import ch.cyberduck.core.DirectoryDelimiterPathContainerService;
import ch.cyberduck.core.ListProgressListener;
import ch.cyberduck.core.Path;
@@ -27,8 +28,8 @@ import ch.cyberduck.core.features.AttributesAdapter;
import ch.cyberduck.core.features.AttributesFinder;
import ch.cyberduck.core.io.Checksum;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpStatus;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -62,7 +63,7 @@ public class AzureAttributesFinderFeature implements AttributesFinder, Attribute
}
try {
if(containerService.isContainer(file)) {
final PathAttributes attributes = new PathAttributes();
final PathAttributes attributes = new DefaultPathAttributes();
final BlobContainerClient client = session.getClient().getBlobContainerClient(containerService.getContainer(file).getName());
final BlobContainerProperties properties = client.getProperties();
attributes.setETag(properties.getETag());
@@ -105,13 +106,13 @@ public class AzureAttributesFinderFeature implements AttributesFinder, Attribute
}
public PathAttributes toAttributes(final BlobProperties properties) {
final PathAttributes attributes = new PathAttributes();
final PathAttributes attributes = new DefaultPathAttributes();
attributes.setSize(properties.getBlobSize());
attributes.setModificationDate(properties.getLastModified().toInstant().toEpochMilli());
if(properties.getContentMd5() != null) {
attributes.setChecksum(Checksum.parse(Hex.encodeHexString(properties.getContentMd5())));
}
attributes.setETag(properties.getETag());
attributes.setETag(StringUtils.removeStart(StringUtils.removeEnd(properties.getETag(), "\""), "\""));
final Map<String, String> custom = new HashMap<>();
custom.put(AzureAttributesFinderFeature.KEY_BLOB_TYPE, properties.getBlobType().name());
attributes.setCustom(custom);
@@ -119,7 +120,7 @@ public class AzureAttributesFinderFeature implements AttributesFinder, Attribute
}
public PathAttributes toAttributes(final BlobItemProperties properties) {
final PathAttributes attributes = new PathAttributes();
final PathAttributes attributes = new DefaultPathAttributes();
attributes.setSize(properties.getContentLength());
attributes.setModificationDate(properties.getLastModified().toInstant().toEpochMilli());
attributes.setETag(properties.getETag());
@@ -16,6 +16,7 @@ package ch.cyberduck.core.azure;
*/
import ch.cyberduck.core.AttributedList;
import ch.cyberduck.core.DefaultPathAttributes;
import ch.cyberduck.core.ListProgressListener;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
@@ -46,7 +47,7 @@ public class AzureContainerListService implements RootListService {
for(BlobContainerItem container : session.getClient().listBlobContainers(new ListBlobContainersOptions()
.setMaxResultsPerPage(HostPreferencesFactory.get(session.getHost()).getInteger("azure.listing.chunksize"))
.setDetails(new BlobContainerListDetails().setRetrieveDeleted(false).setRetrieveMetadata(true)), null)) {
final PathAttributes attributes = new PathAttributes();
final PathAttributes attributes = new DefaultPathAttributes();
attributes.setETag(container.getProperties().getETag());
attributes.setModificationDate(container.getProperties().getLastModified().toInstant().toEpochMilli());
containers.add(new Path(PathNormalizer.normalize(container.getName()), EnumSet.of(Path.Type.volume, Path.Type.directory), attributes));
@@ -32,6 +32,7 @@ import org.apache.commons.lang3.StringUtils;
import java.text.MessageFormat;
import java.util.EnumSet;
import java.util.Optional;
import com.azure.core.exception.HttpResponseException;
@@ -69,28 +70,28 @@ public class AzureDirectoryFeature implements Directory<Void> {
}
@Override
public void preflight(final Path workdir, final String filename) throws BackgroundException {
public void preflight(final Path workdir, final Optional<String> filename) throws BackgroundException {
if(workdir.isRoot()) {
if(!validate(filename)) {
throw new InvalidFilenameException(MessageFormat.format(LocaleFactory.localizedString("Cannot create folder {0}", "Error"), filename));
if(filename.isPresent()) {
if(!validate(filename.get())) {
throw new InvalidFilenameException(MessageFormat.format(LocaleFactory.localizedString("Cannot create folder {0}", "Error"), filename));
}
}
// Empty argument if not known in validation
}
}
public static boolean validate(final String filename) {
// Empty argument if not known in validation
if(StringUtils.isNotBlank(filename)) {
// Container names must be lowercase, between 3-63 characters long and must start with a letter or
// number. Container names may contain only letters, numbers, and the dash (-) character.
if(StringUtils.length(filename) > 63) {
return false;
}
if(StringUtils.length(filename) < 3) {
return false;
}
if(!StringUtils.isAlphanumeric(RegExUtils.removeAll(filename, "-"))) {
return false;
}
// Container names must be lowercase, between 3-63 characters long and must start with a letter or
// number. Container names may contain only letters, numbers, and the dash (-) character.
if(StringUtils.length(filename) > 63) {
return false;
}
if(StringUtils.length(filename) < 3) {
return false;
}
if(!StringUtils.isAlphanumeric(RegExUtils.removeAll(filename, "-"))) {
return false;
}
return true;
}
@@ -20,7 +20,7 @@ import ch.cyberduck.core.Path;
import ch.cyberduck.core.exception.BackgroundException;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.features.Move;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.transfer.TransferStatus;
import java.util.Collections;
@@ -44,7 +44,7 @@ public class AzureMoveFeature implements Move {
@Override
public Path move(final Path file, final Path renamed, final TransferStatus status, final Delete.Callback callback, final ConnectionCallback connectionCallback) throws BackgroundException {
final Path copy = proxy.copy(file, renamed, status, connectionCallback, new DisabledStreamListener());
final Path copy = proxy.copy(file, renamed, status, connectionCallback, StreamListener.noop);
delete.delete(Collections.singletonList(file), connectionCallback, callback);
return copy;
}
@@ -26,6 +26,7 @@ import ch.cyberduck.core.transfer.TransferStatus;
import org.apache.commons.io.input.NullInputStream;
import java.text.MessageFormat;
import java.util.Optional;
public class AzureTouchFeature extends DefaultTouchFeature<Void> {
@@ -34,7 +35,7 @@ public class AzureTouchFeature extends DefaultTouchFeature<Void> {
}
@Override
public void preflight(final Path workdir, final String filename) throws BackgroundException {
public void preflight(final Path workdir, final Optional<String> filename) throws BackgroundException {
if(workdir.isRoot()) {
throw new AccessDeniedException(MessageFormat.format(LocaleFactory.localizedString("Cannot create {0}", "Error"), filename)).withFile(workdir);
}
@@ -14,14 +14,13 @@ package ch.cyberduck.core.azure;/*
*/
import ch.cyberduck.core.Credentials;
import ch.cyberduck.core.DisabledCancelCallback;
import ch.cyberduck.core.DisabledHostKeyCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordStore;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.HostKeyCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.LoginConnectionService;
import ch.cyberduck.core.cryptomator.CryptoVault;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.threading.CancelCallback;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.VaultTest;
import org.junit.After;
@@ -34,11 +33,11 @@ public class AbstractAzureTest extends VaultTest {
@Parameterized.Parameters(name = "vaultVersion = {0}")
public static Object[] data() {
return new Object[]{CryptoVault.VAULT_VERSION_DEPRECATED, CryptoVault.VAULT_VERSION};
return new Object[]{VaultVersion.Type.V8, VaultVersion.Type.UVF};
}
@Parameterized.Parameter
public int vaultVersion;
public VaultVersion.Type vaultVersion;
@After
public void disconnect() throws Exception {
@@ -47,11 +46,11 @@ public class AbstractAzureTest extends VaultTest {
@Before
public void setup() throws Exception {
final Host host = new Host(new AzureProtocol(), "kahy9boj3eib.blob.core.windows.net", new Credentials(
PROPERTIES.get("azure.user"), PROPERTIES.get("azure.password")
final Host host = new Host(new AzureProtocol(), PROPERTIES.get("azure.hostname"), new Credentials(
PROPERTIES.get("azure.user")
));
session = new AzureSession(host);
new LoginConnectionService(new DisabledLoginCallback(), new DisabledHostKeyCallback(),
new DisabledPasswordStore(), new DisabledProgressListener()).connect(session, new DisabledCancelCallback());
new LoginConnectionService(LoginCallback.noop, HostKeyCallback.noop,
new TestPasswordStore(), ProgressListener.noop).check(session, CancelCallback.noop);
}
}
@@ -4,12 +4,13 @@ import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.AsciiRandomStringService;
import ch.cyberduck.core.DefaultPathPredicate;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.exception.NotfoundException;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.io.MD5ChecksumCompute;
import ch.cyberduck.core.shared.DefaultAttributesFinderFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.test.IntegrationTest;
@@ -50,7 +51,8 @@ public class AzureAttributesFinderFeatureTest extends AbstractAzureTest {
assertEquals(0L, attributes.getSize());
assertEquals("d41d8cd98f00b204e9800998ecf8427e", attributes.getChecksum().hash);
assertNotNull(attributes.getETag());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
assertEquals(attributes.getETag(), new DefaultAttributesFinderFeature(session).find(test).getETag());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -61,7 +63,8 @@ public class AzureAttributesFinderFeatureTest extends AbstractAzureTest {
final PathAttributes attributes = f.find(container);
assertNotEquals(PathAttributes.EMPTY, attributes);
assertNotNull(attributes.getETag());
new AzureDeleteFeature(session).delete(Collections.singletonList(container), new DisabledLoginCallback(), new Delete.DisabledCallback());
assertEquals(attributes.getETag(), new DefaultAttributesFinderFeature(session).find(container).getETag());
new AzureDeleteFeature(session).delete(Collections.singletonList(container), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -79,7 +82,7 @@ public class AzureAttributesFinderFeatureTest extends AbstractAzureTest {
assertNotEquals(PathAttributes.EMPTY, attributes);
assertNotNull(attributes.getETag());
assertNotNull(new AzureObjectListService(session).list(directory, new DisabledListProgressListener()).find(new DefaultPathPredicate(test)));
new AzureDeleteFeature(session).delete(Collections.singletonList(directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(directory), LoginCallback.noop, new Delete.DisabledCallback());
assertNotNull(new AzureObjectListService(session).list(directory, new DisabledListProgressListener()).find(new DefaultPathPredicate(test)));
// Still found as prefix
assertNotNull(new AzureObjectListService(session).list(container, new DisabledListProgressListener()).find(new DefaultPathPredicate(intermediate)));
@@ -87,7 +90,7 @@ public class AzureAttributesFinderFeatureTest extends AbstractAzureTest {
// Ignore 404 failures
assertSame(PathAttributes.EMPTY, new AzureAttributesFinderFeature(session).find(directory));
assertSame(PathAttributes.EMPTY, new AzureAttributesFinderFeature(session).find(intermediate));
new AzureDeleteFeature(session).delete(Collections.singletonList(directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(container), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(directory), LoginCallback.noop, new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(container), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -1,16 +1,16 @@
package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.exception.UnsupportedException;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.features.Find;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamCancelation;
import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.io.StreamProgress;
import ch.cyberduck.core.shared.DefaultFindFeature;
import ch.cyberduck.core.transfer.TransferStatus;
@@ -46,12 +46,12 @@ public class AzureCopyFeatureTest extends AbstractAzureTest {
assertEquals("Cannot copy cyberduck.", e.getDetail(false));
}
final Path copy = feature.copy(test,
new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), new DisabledConnectionCallback(), new DisabledStreamListener());
new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), ConnectionCallback.noop, StreamListener.noop);
assertEquals(PathAttributes.EMPTY, copy.attributes());
final PathAttributes sourceAttr = new AzureAttributesFinderFeature(session).find(test);
final PathAttributes copyAttr = new AzureAttributesFinderFeature(session).find(copy);
assertNotEquals(sourceAttr.getETag(), copyAttr.getETag());
new AzureDeleteFeature(session).delete(Arrays.asList(test, copy), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Arrays.asList(test, copy), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -62,15 +62,15 @@ public class AzureCopyFeatureTest extends AbstractAzureTest {
final Path test = new AzureTouchFeature(session).touch(
new AzureWriteFeature(session), new Path(folder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus());
final byte[] content = RandomUtils.nextBytes(1023);
final OutputStream out = new AzureWriteFeature(session).write(test, new TransferStatus().setExists(true).setLength(content.length), new DisabledConnectionCallback());
final OutputStream out = new AzureWriteFeature(session).write(test, new TransferStatus().setExists(true).setLength(content.length), ConnectionCallback.noop);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(new ByteArrayInputStream(content), out);
final Path copy = new AzureTouchFeature(session).touch(
new AzureWriteFeature(session), new Path(folder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus());
new AzureCopyFeature(session).copy(test, copy, new TransferStatus().setExists(true), new DisabledConnectionCallback(), new DisabledStreamListener());
new AzureCopyFeature(session).copy(test, copy, new TransferStatus().setExists(true), ConnectionCallback.noop, StreamListener.noop);
assertEquals(1023L, new AzureAttributesFinderFeature(session).find(copy).getSize());
final Find find = new DefaultFindFeature(session);
assertTrue(find.find(test));
assertTrue(find.find(copy));
new AzureDeleteFeature(session).delete(Arrays.asList(test, copy), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Arrays.asList(test, copy), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -2,7 +2,7 @@ package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.AsciiRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.exception.NotfoundException;
import ch.cyberduck.core.features.Delete;
@@ -25,14 +25,14 @@ public class AzureDeleteFeatureTest extends AbstractAzureTest {
@Test(expected = NotfoundException.class)
public void testDeleteNotFoundBucket() throws Exception {
final Path container = new Path(new AsciiRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume));
new AzureDeleteFeature(session).delete(Collections.singletonList(container), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(container), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test(expected = NotfoundException.class)
public void testDeleteNotFoundKey() throws Exception {
final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path test = new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -40,7 +40,7 @@ public class AzureDeleteFeatureTest extends AbstractAzureTest {
final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path test = new AzureDirectoryFeature(session).mkdir(new AzureWriteFeature(session), new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)), new TransferStatus());
assertTrue(new AzureFindFeature(session).find(test));
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new AzureFindFeature(session).find(test));
}
@@ -51,7 +51,7 @@ public class AzureDeleteFeatureTest extends AbstractAzureTest {
final Path test = new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), test, new TransferStatus());
assertTrue(new AzureFindFeature(session).find(test));
new AzureDeleteFeature(session).delete(Arrays.asList(container, test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Arrays.asList(container, test), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new AzureFindFeature(session).find(test));
}
}
@@ -1,7 +1,7 @@
package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.exception.ConflictException;
@@ -16,6 +16,7 @@ import org.junit.experimental.categories.Category;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Optional;
import static org.junit.Assert.*;
@@ -30,7 +31,7 @@ public class AzureDirectoryFeatureTest extends AbstractAzureTest {
assertEquals(PathAttributes.EMPTY, container.attributes());
assertThrows(ConflictException.class, () -> feature.mkdir(new AzureWriteFeature(session), container, new TransferStatus()));
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus());
new AzureDeleteFeature(session).delete(Collections.singletonList(container), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(container), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new AzureFindFeature(session).find(container));
}
@@ -38,11 +39,11 @@ public class AzureDirectoryFeatureTest extends AbstractAzureTest {
public void testCreateContainerInvalidName() throws Exception {
final Path container = new Path("untitled folder", EnumSet.of(Path.Type.directory));
final AzureDirectoryFeature feature = new AzureDirectoryFeature(session);
assertFalse(feature.isSupported(container.getParent(), container.getName()));
assertThrows(InvalidFilenameException.class, () -> feature.preflight(container.getParent(), container.getName()));
assertFalse(feature.isSupported(container.getParent(), Optional.of(container.getName())));
assertThrows(InvalidFilenameException.class, () -> feature.preflight(container.getParent(), Optional.of(container.getName())));
feature.mkdir(new AzureWriteFeature(session), container, new TransferStatus());
assertTrue(new AzureFindFeature(session).find(container));
new AzureDeleteFeature(session).delete(Collections.singletonList(container), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(container), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new AzureFindFeature(session).find(container));
}
@@ -56,10 +57,10 @@ public class AzureDirectoryFeatureTest extends AbstractAzureTest {
assertEquals(PathAttributes.EMPTY, placeholder.attributes());
final Path file = new Path(placeholder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), file, new TransferStatus());
new AzureDeleteFeature(session).delete(Collections.singletonList(placeholder), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(placeholder), LoginCallback.noop, new Delete.DisabledCallback());
// Still find common prefix
assertTrue(new AzureFindFeature(session).find(placeholder));
assertEquals(PathAttributes.EMPTY, new AzureAttributesFinderFeature(session).find(placeholder));
new AzureDeleteFeature(session).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -19,7 +19,7 @@ import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.AsciiRandomStringService;
import ch.cyberduck.core.CachingFindFeature;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathCache;
import ch.cyberduck.core.features.Delete;
@@ -57,7 +57,7 @@ public class AzureFindFeatureTest extends AbstractAzureTest {
new AzureWriteFeature(session), new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)), new TransferStatus());
assertTrue(new AzureFindFeature(session).find(folder));
assertFalse(new AzureFindFeature(session).find(new Path(folder.getAbsolute(), EnumSet.of(Path.Type.file))));
new AzureDeleteFeature(session).delete(Collections.singletonList(folder), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(folder), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -67,7 +67,7 @@ public class AzureFindFeatureTest extends AbstractAzureTest {
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), file, new TransferStatus());
assertTrue(new AzureFindFeature(session).find(file));
assertFalse(new AzureFindFeature(session).find(new Path(file.getAbsolute(), EnumSet.of(Path.Type.directory))));
new AzureDeleteFeature(session).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -84,7 +84,7 @@ public class AzureFindFeatureTest extends AbstractAzureTest {
assertTrue(new AzureFindFeature(session).find(new Path(container, prefix, EnumSet.of(Path.Type.directory, Path.Type.placeholder))));
assertTrue(new AzureObjectListService(session).list(intermediate,
new DisabledListProgressListener()).contains(test));
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new AzureFindFeature(session).find(test));
assertFalse(new AzureFindFeature(session).find(intermediate));
final PathCache cache = new PathCache(1);
@@ -1,7 +1,7 @@
package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.transfer.TransferStatus;
@@ -30,7 +30,7 @@ public class AzureMetadataFeatureTest extends AbstractAzureTest {
assertFalse(metadata.isEmpty());
assertTrue(metadata.containsKey("Test"));
assertEquals(v, metadata.get("Test"));
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -44,6 +44,6 @@ public class AzureMetadataFeatureTest extends AbstractAzureTest {
assertFalse(metadata.isEmpty());
assertTrue(metadata.containsKey("Cache-Control"));
assertEquals("public, max-age=0", metadata.get("Cache-Control"));
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -1,8 +1,8 @@
package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.features.Delete;
@@ -29,12 +29,12 @@ public class AzureMoveFeatureTest extends AbstractAzureTest {
final Path test = new AzureTouchFeature(session).touch(new AzureWriteFeature(session), new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus());
final PathAttributes sourceAttr = new AzureAttributesFinderFeature(session).find(test);
assertTrue(new AzureFindFeature(session).find(test));
final Path target = new AzureMoveFeature(session).move(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), new Delete.DisabledCallback(), new DisabledConnectionCallback());
final Path target = new AzureMoveFeature(session).move(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), new Delete.DisabledCallback(), ConnectionCallback.noop);
assertFalse(new AzureFindFeature(session).find(test));
assertTrue(new AzureFindFeature(session).find(target));
final PathAttributes targetAttr = new AzureAttributesFinderFeature(session).find(target);
assertEquals(Comparison.equal, session.getHost().getProtocol().getFeature(ComparisonService.class).compare(Path.Type.file, sourceAttr, targetAttr));
new AzureDeleteFeature(session).delete(Collections.<Path>singletonList(target), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.<Path>singletonList(target), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -3,8 +3,8 @@ package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.AttributedList;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.IndexedListProgressListener;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.exception.NotfoundException;
@@ -46,7 +46,7 @@ public class AzureObjectListServiceTest extends AbstractAzureTest {
}
}).isEmpty());
assertTrue(callback.get());
new AzureDeleteFeature(session).delete(Collections.singletonList(folder), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(folder), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test(expected = NotfoundException.class)
@@ -69,7 +69,7 @@ public class AzureObjectListServiceTest extends AbstractAzureTest {
final PathAttributes attributes = list.get(0).attributes();
assertEquals(attributes, new AzureAttributesFinderFeature(session).find(file));
assertSame(directory, list.get(0).getParent());
new AzureDeleteFeature(session).delete(Arrays.asList(file, directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Arrays.asList(file, directory), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -98,8 +98,8 @@ public class AzureObjectListServiceTest extends AbstractAzureTest {
});
for(int i = 0; i < list.size(); i++) {
assertEquals(files.get(i), list.get(i).getName());
new AzureDeleteFeature(session).delete(Collections.singletonList(list.get(i)), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(list.get(i)), LoginCallback.noop, new Delete.DisabledCallback());
}
new AzureDeleteFeature(session).delete(Collections.singletonList(directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(directory), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -1,8 +1,8 @@
package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.exception.NotfoundException;
import ch.cyberduck.core.features.Delete;
@@ -33,7 +33,7 @@ public class AzureReadFeatureTest extends AbstractAzureTest {
public void testReadNotFound() throws Exception {
final TransferStatus status = new TransferStatus();
final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
new AzureReadFeature(session).read(new Path(container, "nosuchname", EnumSet.of(Path.Type.file)), status, new DisabledConnectionCallback());
new AzureReadFeature(session).read(new Path(container, "nosuchname", EnumSet.of(Path.Type.file)), status, ConnectionCallback.noop);
}
@Test
@@ -41,10 +41,10 @@ public class AzureReadFeatureTest extends AbstractAzureTest {
final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path test = new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), test, new TransferStatus());
final InputStream in = new AzureReadFeature(session).read(test, new TransferStatus().setLength(0L), new DisabledConnectionCallback());
final InputStream in = new AzureReadFeature(session).read(test, new TransferStatus().setLength(0L), ConnectionCallback.noop);
assertNotNull(in);
in.close();
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -53,14 +53,14 @@ public class AzureReadFeatureTest extends AbstractAzureTest {
final Path test = new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), test, new TransferStatus());
final byte[] content = RandomUtils.nextBytes(1023);
final OutputStream out = new AzureWriteFeature(session).write(test, new TransferStatus().setExists(true).setLength(content.length), new DisabledConnectionCallback());
final OutputStream out = new AzureWriteFeature(session).write(test, new TransferStatus().setExists(true).setLength(content.length), ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(new ByteArrayInputStream(content), out);
final TransferStatus status = new TransferStatus();
status.setLength(content.length);
status.setAppend(true);
status.setOffset(100L);
final InputStream in = new AzureReadFeature(session).read(test, status, new DisabledConnectionCallback());
final InputStream in = new AzureReadFeature(session).read(test, status, ConnectionCallback.noop);
assertNotNull(in);
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length - 100);
new StreamCopier(status, status).transfer(in, buffer);
@@ -70,6 +70,6 @@ public class AzureReadFeatureTest extends AbstractAzureTest {
in.close();
// Test double close
in.close();
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -1,15 +1,14 @@
package ch.cyberduck.core.azure;
import ch.cyberduck.core.Credentials;
import ch.cyberduck.core.DisabledCancelCallback;
import ch.cyberduck.core.DisabledHostKeyCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordStore;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.HostKeyCallback;
import ch.cyberduck.core.LoginConnectionService;
import ch.cyberduck.core.LoginOptions;
import ch.cyberduck.core.Profile;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.ProtocolFactory;
import ch.cyberduck.core.exception.LoginCanceledException;
import ch.cyberduck.core.features.AclPermission;
@@ -19,6 +18,7 @@ import ch.cyberduck.core.features.Touch;
import ch.cyberduck.core.serializer.impl.dd.ProfilePlistReader;
import ch.cyberduck.core.ssl.DefaultX509KeyManager;
import ch.cyberduck.core.ssl.DisabledX509TrustManager;
import ch.cyberduck.core.threading.CancelCallback;
import ch.cyberduck.test.IntegrationTest;
import org.apache.commons.lang3.StringUtils;
@@ -52,7 +52,7 @@ public class AzureSessionTest extends AbstractAzureTest {
final ProtocolFactory factory = new ProtocolFactory(new HashSet<>(Collections.singleton(new AzureProtocol())));
final Profile profile = new ProfilePlistReader(factory).read(
this.getClass().getResourceAsStream("/Azure (Shared Access Signature Token).cyberduckprofile"));
final Host host = new Host(profile, "kahy9boj3eib.blob.core.windows.net", new Credentials(
final Host host = new Host(profile, PROPERTIES.get("azure.hostname"), new Credentials(
PROPERTIES.get("azure.user"), null, PROPERTIES.get("azure.token")
));
final AzureSession session = new AzureSession(host, new DisabledX509TrustManager(), new DefaultX509KeyManager());
@@ -62,9 +62,9 @@ public class AzureSessionTest extends AbstractAzureTest {
fail(reason);
return null;
}
}, new DisabledHostKeyCallback(),
new DisabledPasswordStore(), new DisabledProgressListener());
login.connect(session, new DisabledCancelCallback());
}, HostKeyCallback.noop,
new DisabledPasswordStore(), ProgressListener.noop);
login.connect(session, CancelCallback.noop);
session.close();
}
@@ -73,7 +73,7 @@ public class AzureSessionTest extends AbstractAzureTest {
final ProtocolFactory factory = new ProtocolFactory(new HashSet<>(Collections.singleton(new AzureProtocol())));
final Profile profile = new ProfilePlistReader(factory).read(
this.getClass().getResourceAsStream("/Azure (Shared Access Signature Token).cyberduckprofile"));
final Host host = new Host(profile, "kahy9boj3eib.blob.core.windows.net", new Credentials(
final Host host = new Host(profile, PROPERTIES.get("azure.hostname"), new Credentials(
null, null, "?sv=2017-07-29&ss=bfqt&srt=sco&sp=rwdlacup&se=2030-05-20T04:29:30Z&st=2018-05-09T20:29:30Z&spr=https&sig=invalid"));
final AzureSession session = new AzureSession(host);
final AtomicBoolean prompt = new AtomicBoolean();
@@ -90,9 +90,9 @@ public class AzureSessionTest extends AbstractAzureTest {
prompt.set(true);
}
}
}, new DisabledHostKeyCallback(),
new DisabledPasswordStore(), new DisabledProgressListener());
connect.connect(session, new DisabledCancelCallback());
}, HostKeyCallback.noop,
new DisabledPasswordStore(), ProgressListener.noop);
connect.connect(session, CancelCallback.noop);
assertTrue(session.isConnected());
connect.close(session);
assertFalse(session.isConnected());
@@ -100,7 +100,7 @@ public class AzureSessionTest extends AbstractAzureTest {
@Test(expected = LoginCanceledException.class)
public void testConnectInvalidKey() throws Exception {
final Host host = new Host(new AzureProtocol(), "kahy9boj3eib.blob.core.windows.net", new Credentials(
final Host host = new Host(new AzureProtocol(), PROPERTIES.get("azure.hostname"), new Credentials(
PROPERTIES.get("azure.user"), "6h9BmTcabGajIE/AVGzgu9JcC15JjrzkjdAIe+2daRK8XlyVdYT6zHtFMwXOtrlCw74jX9R0w4GN56vKQjOpVA=="
));
final AzureSession session = new AzureSession(host);
@@ -110,13 +110,13 @@ public class AzureSessionTest extends AbstractAzureTest {
assertEquals("Login kahy9boj3eib.blob.core.windows.net", title);
return super.prompt(bookmark, username, title, reason, options);
}
}, new DisabledHostKeyCallback(),
new DisabledPasswordStore(), new DisabledProgressListener()).connect(session, new DisabledCancelCallback());
}, HostKeyCallback.noop,
new DisabledPasswordStore(), ProgressListener.noop).connect(session, CancelCallback.noop);
}
@Test(expected = LoginCanceledException.class)
public void testConnectKeyNotBase64() throws Exception {
final Host host = new Host(new AzureProtocol(), "kahy9boj3eib.blob.core.windows.net", new Credentials(
final Host host = new Host(new AzureProtocol(), PROPERTIES.get("azure.hostname"), new Credentials(
PROPERTIES.get("azure.user"), "6h9B"
));
final AzureSession session = new AzureSession(host);
@@ -126,7 +126,7 @@ public class AzureSessionTest extends AbstractAzureTest {
assertEquals("Login kahy9boj3eib.blob.core.windows.net", title);
return super.prompt(bookmark, username, title, reason, options);
}
}, new DisabledHostKeyCallback(),
new DisabledPasswordStore(), new DisabledProgressListener()).connect(session, new DisabledCancelCallback());
}, HostKeyCallback.noop,
new DisabledPasswordStore(), ProgressListener.noop).connect(session, CancelCallback.noop);
}
}
@@ -17,7 +17,7 @@ package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.AsciiRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.transfer.TransferStatus;
@@ -28,6 +28,7 @@ import org.junit.experimental.categories.Category;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Optional;
@Category(IntegrationTest.class)
public class AzureTouchFeatureTest extends AbstractAzureTest {
@@ -37,16 +38,16 @@ public class AzureTouchFeatureTest extends AbstractAzureTest {
final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path test = new Path(container, String.format(".%s.", new AlphanumericRandomStringService().random()), EnumSet.of(Path.Type.file));
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), test, new TransferStatus());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
public void testPreflightFilename() throws Exception {
final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final AzureTouchFeature feature = new AzureTouchFeature(session);
feature.preflight(container, new AsciiRandomStringService().random());
feature.preflight(container, new AlphanumericRandomStringService().random());
feature.preflight(container, String.format("%s.suffix", new AlphanumericRandomStringService().random()));
feature.preflight(container, "?");
feature.preflight(container, Optional.of(new AsciiRandomStringService().random()));
feature.preflight(container, Optional.of(new AlphanumericRandomStringService().random()));
feature.preflight(container, Optional.of(String.format("%s.suffix", new AlphanumericRandomStringService().random())));
feature.preflight(container, Optional.of("?"));
}
}
@@ -3,9 +3,7 @@ package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DescriptiveUrl;
import ch.cyberduck.core.DescriptiveUrlBag;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordStore;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.transfer.TransferStatus;
@@ -28,16 +26,11 @@ public class AzureUrlProviderTest extends AbstractAzureTest {
final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path test = new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), test, new TransferStatus());
final DescriptiveUrlBag urls = new AzureUrlProvider(session, new DisabledPasswordStore() {
@Override
public String findLoginPassword(final Host bookmark) {
return PROPERTIES.get("azure.password");
}
}).toUrl(test).filter(DescriptiveUrl.Type.signed);
final DescriptiveUrlBag urls = new AzureUrlProvider(session, new TestPasswordStore()).toUrl(test).filter(DescriptiveUrl.Type.signed);
assertEquals(5, urls.size());
for(DescriptiveUrl url : urls) {
assertFalse(url.getUrl().isEmpty());
}
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -1,8 +1,8 @@
package ch.cyberduck.core.azure;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.features.Delete;
@@ -43,7 +43,7 @@ public class AzureWriteFeatureTest extends AbstractAzureTest {
status.setMetadata(Collections.singletonMap("Cache-Control", "public,max-age=86400"));
final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path test = new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final OutputStream out = new AzureWriteFeature(session, BlobType.APPEND_BLOB).write(test, status, new DisabledConnectionCallback());
final OutputStream out = new AzureWriteFeature(session, BlobType.APPEND_BLOB).write(test, status, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(new ByteArrayInputStream(content), out);
assertTrue(new AzureFindFeature(session).find(test));
@@ -53,19 +53,19 @@ public class AzureWriteFeatureTest extends AbstractAzureTest {
assertEquals("text/plain", metadata.get("Content-Type"));
assertEquals("public,max-age=86400", metadata.get("Cache-Control"));
final byte[] buffer = new byte[content.length];
final InputStream in = new AzureReadFeature(session).read(test, new TransferStatus(), new DisabledConnectionCallback());
final InputStream in = new AzureReadFeature(session).read(test, new TransferStatus(), ConnectionCallback.noop);
IOUtils.readFully(in, buffer);
in.close();
assertArrayEquals(content, buffer);
final OutputStream overwrite = new AzureWriteFeature(session).write(test, new TransferStatus().setExists(true)
.setLength("overwrite".getBytes(StandardCharsets.UTF_8).length).setMetadata(Collections.singletonMap("Content-Type", "text/plain")), new DisabledConnectionCallback());
.setLength("overwrite".getBytes(StandardCharsets.UTF_8).length).setMetadata(Collections.singletonMap("Content-Type", "text/plain")), ConnectionCallback.noop);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop)
.transfer(new ByteArrayInputStream("overwrite".getBytes(StandardCharsets.UTF_8)), overwrite);
overwrite.close();
// Test double close
overwrite.close();
assertEquals("overwrite".getBytes(StandardCharsets.UTF_8).length, new AzureAttributesFinderFeature(session).find(test).getSize());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -78,7 +78,7 @@ public class AzureWriteFeatureTest extends AbstractAzureTest {
status.setMetadata(Collections.singletonMap("Cache-Control", "public,max-age=86400"));
final Path container = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path test = new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final OutputStream out = new AzureWriteFeature(session, BlobType.BLOCK_BLOB).write(test, status, new DisabledConnectionCallback());
final OutputStream out = new AzureWriteFeature(session, BlobType.BLOCK_BLOB).write(test, status, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(new ByteArrayInputStream(content), out);
assertTrue(new AzureFindFeature(session).find(test));
@@ -88,18 +88,18 @@ public class AzureWriteFeatureTest extends AbstractAzureTest {
assertEquals("text/plain", metadata.get("Content-Type"));
assertEquals("public,max-age=86400", metadata.get("Cache-Control"));
final byte[] buffer = new byte[content.length];
final InputStream in = new AzureReadFeature(session).read(test, new TransferStatus(), new DisabledConnectionCallback());
final InputStream in = new AzureReadFeature(session).read(test, new TransferStatus(), ConnectionCallback.noop);
IOUtils.readFully(in, buffer);
in.close();
assertArrayEquals(content, buffer);
final OutputStream overwrite = new AzureWriteFeature(session).write(test, new TransferStatus().setExists(true)
.setLength("overwrite".getBytes(StandardCharsets.UTF_8).length).setMetadata(Collections.singletonMap("Content-Type", "text/plain")), new DisabledConnectionCallback());
.setLength("overwrite".getBytes(StandardCharsets.UTF_8).length).setMetadata(Collections.singletonMap("Content-Type", "text/plain")), ConnectionCallback.noop);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop)
.transfer(new ByteArrayInputStream("overwrite".getBytes(StandardCharsets.UTF_8)), overwrite);
overwrite.close();
// Test double close
overwrite.close();
assertEquals("overwrite".getBytes(StandardCharsets.UTF_8).length, new AzureAttributesFinderFeature(session).find(test).getSize());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,8 +16,8 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.azure.AbstractAzureTest;
import ch.cyberduck.core.azure.AzureDeleteFeature;
@@ -31,6 +31,7 @@ import ch.cyberduck.core.shared.DefaultFindFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.junit.Test;
@@ -42,7 +43,6 @@ import java.util.Arrays;
import java.util.EnumSet;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
@Category(IntegrationTest.class)
@RunWith(value = Parameterized.class)
@@ -51,28 +51,15 @@ public class AzureDirectoryFeatureTest extends AbstractAzureTest {
@Test
public void testMakeDirectoryEncrypted() throws Exception {
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final Path test = cryptomator.getFeature(session, Directory.class, new AzureDirectoryFeature(session)).mkdir(
cryptomator.getFeature(session, Write.class, new AzureWriteFeature(session)), new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)), new TransferStatus());
assertTrue(test.getType().contains(Path.Type.placeholder));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(test));
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
}
@Test
public void testMakeDirectoryLongFilenameEncrypted() throws Exception {
assumeTrue(vaultVersion == CryptoVault.VAULT_VERSION_DEPRECATED);
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final Path test = cryptomator.getFeature(session, Directory.class, new AzureDirectoryFeature(session)).mkdir(
cryptomator.getFeature(session, Write.class, new AzureWriteFeature(session)), new Path(vault, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.directory)), new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(test));
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -17,8 +17,8 @@ package ch.cyberduck.core.cryptomator;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.azure.AbstractAzureTest;
import ch.cyberduck.core.azure.AzureDeleteFeature;
@@ -32,6 +32,7 @@ import ch.cyberduck.core.shared.DefaultTouchFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.junit.Test;
@@ -52,15 +53,16 @@ public class AzureListServiceTest extends AbstractAzureTest {
@Test
public void testListCryptomator() throws Exception {
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final Path test = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
assertTrue(new CryptoListService(session, new AzureObjectListService(session), cryptomator).list(vault, new DisabledListProgressListener()).isEmpty());
new CryptoTouchFeature<>(session, new DefaultTouchFeature<Void>(session), cryptomator).touch(
new CryptoWriteFeature<>(session, new AzureWriteFeature(session), cryptomator), test, new TransferStatus());
assertEquals(test, new CryptoListService(session, new AzureObjectListService(session), cryptomator).list(vault, new DisabledListProgressListener()).get(0));
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,9 +16,9 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.azure.AbstractAzureTest;
import ch.cyberduck.core.azure.AzureDeleteFeature;
@@ -38,6 +38,7 @@ import ch.cyberduck.core.shared.DefaultFindFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.junit.Test;
@@ -58,9 +59,10 @@ public class AzureMoveFeatureTest extends AbstractAzureTest {
@Test
public void testMove() throws Exception {
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final Path folder = cryptomator.getFeature(session, Directory.class, new AzureDirectoryFeature(session)).mkdir(
cryptomator.getFeature(session, Write.class, new AzureWriteFeature(session)), new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)), new TransferStatus());
@@ -70,17 +72,17 @@ public class AzureMoveFeatureTest extends AbstractAzureTest {
final Move move = cryptomator.getFeature(session, Move.class, new AzureMoveFeature(session));
// rename file
final Path fileRenamed = new Path(folder, "f1", EnumSet.of(Path.Type.file));
move.move(file, fileRenamed, new TransferStatus(), new Delete.DisabledCallback(), new DisabledConnectionCallback());
move.move(file, fileRenamed, new TransferStatus(), new Delete.DisabledCallback(), ConnectionCallback.noop);
assertFalse(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(file));
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(fileRenamed));
// rename folder
final Path folderRenamed = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.placeholder));
move.move(folder, folderRenamed, new TransferStatus(), new Delete.DisabledCallback(), new DisabledConnectionCallback());
move.move(folder, folderRenamed, new TransferStatus(), new Delete.DisabledCallback(), ConnectionCallback.noop);
assertFalse(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(folder));
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(folderRenamed));
final Path fileRenamedInRenamedFolder = new Path(folderRenamed, "f1", EnumSet.of(Path.Type.file));
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(fileRenamedInRenamedFolder));
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(
fileRenamedInRenamedFolder, folderRenamed, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
fileRenamedInRenamedFolder, folderRenamed, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,12 +16,11 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.azure.AbstractAzureTest;
import ch.cyberduck.core.azure.AzureDeleteFeature;
import ch.cyberduck.core.azure.AzureFindFeature;
import ch.cyberduck.core.azure.AzureTouchFeature;
import ch.cyberduck.core.azure.AzureWriteFeature;
import ch.cyberduck.core.cryptomator.features.CryptoTouchFeature;
@@ -32,6 +31,7 @@ import ch.cyberduck.core.shared.DefaultFindFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.junit.Test;
@@ -44,36 +44,18 @@ import java.util.EnumSet;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
@Category(IntegrationTest.class)
@RunWith(value = Parameterized.class)
public class AzureTouchFeatureTest extends AbstractAzureTest {
@Test
public void testTouchLongFilenameEncrypted() throws Exception {
assumeTrue(vaultVersion == CryptoVault.VAULT_VERSION_DEPRECATED);
public void testTouchEncryptedDefaultFeature() throws Exception {
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.volume, Path.Type.directory));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final TransferStatus status = new TransferStatus();
final Path test = new CryptoTouchFeature<>(session, new AzureTouchFeature(session), cryptomator).touch(
new CryptoWriteFeature<>(session, new AzureWriteFeature(session), cryptomator), new Path(vault, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.file)), status);
assertEquals(TransferStatus.UNKNOWN_LENGTH, test.attributes().getSize());
assertEquals(TransferStatus.UNKNOWN_LENGTH, status.getResponse().getSize());
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(test));
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
}
@Test
public void testTouchLongFilenameEncryptedDefaultFeature() throws Exception {
assumeTrue(vaultVersion == CryptoVault.VAULT_VERSION_DEPRECATED);
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.volume, Path.Type.directory));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final TransferStatus status = new TransferStatus();
final Path test = new CryptoTouchFeature<>(session, new AzureTouchFeature(session), cryptomator).touch(
@@ -81,6 +63,6 @@ public class AzureTouchFeatureTest extends AbstractAzureTest {
assertEquals(TransferStatus.UNKNOWN_LENGTH, test.attributes().getSize());
assertEquals(TransferStatus.UNKNOWN_LENGTH, status.getResponse().getSize());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(test));
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,10 +16,10 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.azure.AbstractAzureTest;
@@ -38,6 +38,7 @@ import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.apache.commons.lang3.RandomUtils;
@@ -66,9 +67,10 @@ public class AzureWriteFeatureTest extends AbstractAzureTest {
final byte[] content = RandomUtils.nextBytes(1048576);
status.setLength(content.length);
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.volume, Path.Type.directory));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final CryptoWriteFeature<Void> writer = new CryptoWriteFeature<>(session, new AzureWriteFeature(session), cryptomator);
final FileHeader header = cryptomator.getFileHeaderCryptor().create();
@@ -76,7 +78,7 @@ public class AzureWriteFeatureTest extends AbstractAzureTest {
status.setNonces(new RotatingNonceGenerator(cryptomator.getNonceSize(), cryptomator.numberOfChunks(content.length)));
final Path test = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
status.setChecksum(writer.checksum(test, status).compute(new ByteArrayInputStream(content), status));
final OutputStream out = writer.write(test, status, new DisabledConnectionCallback());
final OutputStream out = writer.write(test, status, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(status, status).transfer(new ByteArrayInputStream(content), out);
out.close();
@@ -84,9 +86,9 @@ public class AzureWriteFeatureTest extends AbstractAzureTest {
final PathAttributes attributes = new CryptoListService(session, new AzureListService(session), cryptomator).list(test.getParent(), new DisabledListProgressListener()).get(test).attributes();
assertEquals(content.length, attributes.getSize());
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
final InputStream in = new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(test, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream in = new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(test, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(status, status).transfer(in, buffer);
assertArrayEquals(content, buffer.toByteArray());
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,12 +16,12 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathCache;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.azure.AbstractAzureTest;
import ch.cyberduck.core.azure.AzureDirectoryFeature;
import ch.cyberduck.core.azure.AzureFindFeature;
@@ -47,6 +47,7 @@ import ch.cyberduck.core.transfer.TransferItem;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.core.worker.CopyWorker;
import ch.cyberduck.core.worker.DeleteWorker;
import ch.cyberduck.test.IntegrationTest;
@@ -76,23 +77,23 @@ public class CopyWorkerTest extends AbstractAzureTest {
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path source = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final Path target = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final byte[] content = RandomUtils.nextBytes(40500);
final TransferStatus status = new TransferStatus();
new CryptoBulkFeature<>(session, new DisabledBulkFeature(), cryptomator).pre(Transfer.Type.upload, Collections.singletonMap(new TransferItem(source), status), new DisabledConnectionCallback());
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(new ByteArrayInputStream(content), new CryptoWriteFeature<>(session, new AzureWriteFeature(session), cryptomator).write(source, status.setLength(content.length), new DisabledConnectionCallback()));
new CryptoBulkFeature<>(session, new DisabledBulkFeature(), cryptomator).pre(Transfer.Type.upload, Collections.singletonMap(new TransferItem(source), status), ConnectionCallback.noop);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(new ByteArrayInputStream(content), new CryptoWriteFeature<>(session, new AzureWriteFeature(session), cryptomator).write(source, status.setLength(content.length), ConnectionCallback.noop));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(source));
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(target));
final ByteArrayOutputStream out = new ByteArrayOutputStream(content.length);
assertEquals(content.length, IOUtils.copy(new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(target, new TransferStatus().setLength(content.length), new DisabledConnectionCallback()), out));
assertEquals(content.length, IOUtils.copy(new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(target, new TransferStatus().setLength(content.length), ConnectionCallback.noop), out));
assertArrayEquals(content, out.toByteArray());
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
@@ -102,53 +103,29 @@ public class CopyWorkerTest extends AbstractAzureTest {
final Path source = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final Path targetFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path target = new Path(targetFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
new CryptoTouchFeature<>(session, new DefaultTouchFeature<Void>(session), cryptomator).touch(
new CryptoWriteFeature<>(session, new AzureWriteFeature(session), cryptomator), source, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
cryptomator.getFeature(session, Directory.class, new AzureDirectoryFeature(session)).mkdir(
cryptomator.getFeature(session, Write.class, new AzureWriteFeature(session)), targetFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(targetFolder));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(target));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
}
@Test
public void testCopyToDifferentFolderLongFilenameCryptomator() throws Exception {
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path source = new Path(vault, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.file));
final Path targetFolder = new Path(vault, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.directory));
final Path target = new Path(targetFolder, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.file));
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
new CryptoTouchFeature<>(session, new AzureTouchFeature(session), cryptomator).touch(
new CryptoWriteFeature<>(session, new AzureWriteFeature(session), cryptomator), source, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
cryptomator.getFeature(session, Directory.class, new AzureDirectoryFeature(session)).mkdir(
cryptomator.getFeature(session, Write.class, new AzureWriteFeature(session)), targetFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(targetFolder));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(target));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
public void testCopyFolder() throws Exception {
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final AbstractVault cryptomator = new DefaultVaultProvider(session).create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final Path folder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path file = new Path(folder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
@@ -161,18 +138,18 @@ public class CopyWorkerTest extends AbstractAzureTest {
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(file));
// copy file
final Path fileRenamed = new Path(folder, "f1", EnumSet.of(Path.Type.file));
new CopyWorker(Collections.singletonMap(file, fileRenamed), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback()).run(session);
new CopyWorker(Collections.singletonMap(file, fileRenamed), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop).run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(file));
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(fileRenamed));
// copy folder
final Path folderRenamed = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
new CopyWorker(Collections.singletonMap(folder, folderRenamed), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback()).run(session);
new CopyWorker(Collections.singletonMap(folder, folderRenamed), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop).run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(folder));
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(folderRenamed));
final Path fileRenamedInRenamedFolder = new Path(folderRenamed, "f1", EnumSet.of(Path.Type.file));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(fileRenamedInRenamedFolder));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
@@ -181,27 +158,27 @@ public class CopyWorkerTest extends AbstractAzureTest {
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path cleartextFile = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final byte[] content = RandomUtils.nextBytes(40500);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(new ByteArrayInputStream(content), new AzureWriteFeature(session).write(cleartextFile, new TransferStatus().setLength(content.length), new DisabledConnectionCallback()));
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(new ByteArrayInputStream(content), new AzureWriteFeature(session).write(cleartextFile, new TransferStatus().setLength(content.length), ConnectionCallback.noop));
assertTrue(new AzureFindFeature(session).find(cleartextFile));
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
cryptomator.getFeature(session, Directory.class, new AzureDirectoryFeature(session)).mkdir(
cryptomator.getFeature(session, Write.class, new AzureWriteFeature(session)), encryptedFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
// copy file into vault
final CopyWorker worker = new CopyWorker(Collections.singletonMap(cleartextFile, encryptedFile), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(cleartextFile, encryptedFile), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(new AzureFindFeature(session).find(cleartextFile));
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(encryptedFile));
final ByteArrayOutputStream out = new ByteArrayOutputStream(content.length);
assertEquals(content.length, IOUtils.copy(new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(encryptedFile, new TransferStatus().setLength(content.length), new DisabledConnectionCallback()), out));
assertEquals(content.length, IOUtils.copy(new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(encryptedFile, new TransferStatus().setLength(content.length), ConnectionCallback.noop), out));
assertArrayEquals(content, out.toByteArray());
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
@@ -214,21 +191,21 @@ public class CopyWorkerTest extends AbstractAzureTest {
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), cleartextFile, new TransferStatus());
assertTrue(new AzureFindFeature(session).find(cleartextFolder));
assertTrue(new AzureFindFeature(session).find(cleartextFile));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
// move directory into vault
final Path encryptedFolder = new Path(vault, cleartextFolder.getName(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, cleartextFile.getName(), EnumSet.of(Path.Type.file));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(cleartextFolder, encryptedFolder), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(cleartextFolder, encryptedFolder), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
assertTrue(new AzureFindFeature(session).find(cleartextFolder));
assertTrue(new AzureFindFeature(session).find(cleartextFile));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
@@ -239,10 +216,10 @@ public class CopyWorkerTest extends AbstractAzureTest {
new AzureDirectoryFeature(session).mkdir(new AzureWriteFeature(session), clearFolder, new TransferStatus());
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
cryptomator.getFeature(session, Directory.class, new AzureDirectoryFeature(session)).mkdir(
cryptomator.getFeature(session, Write.class, new AzureWriteFeature(session)), encryptedFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
@@ -251,12 +228,12 @@ public class CopyWorkerTest extends AbstractAzureTest {
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
// move file outside vault
final Path cleartextFile = new Path(clearFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(encryptedFile, cleartextFile), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(encryptedFile, cleartextFile), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(encryptedFile));
assertTrue(new AzureFindFeature(session).find(cleartextFile));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Arrays.asList(vault, clearFolder), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Arrays.asList(vault, clearFolder), ProgressListener.noop).run(session);
}
@Test
@@ -265,10 +242,10 @@ public class CopyWorkerTest extends AbstractAzureTest {
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
cryptomator.getFeature(session, Directory.class, new AzureDirectoryFeature(session)).mkdir(
cryptomator.getFeature(session, Write.class, new AzureWriteFeature(session)), encryptedFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
@@ -277,14 +254,14 @@ public class CopyWorkerTest extends AbstractAzureTest {
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
// copy directory outside vault
final Path cleartextFolder = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(encryptedFolder, cleartextFolder), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(encryptedFolder, cleartextFolder), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(encryptedFolder));
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(encryptedFile));
assertTrue(new AzureFindFeature(session).find(cleartextFolder));
final Path fileRenamed = new Path(cleartextFolder, encryptedFile.getName(), EnumSet.of(Path.Type.file));
assertTrue(new AzureFindFeature(session).find(fileRenamed));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Arrays.asList(cleartextFolder, vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Arrays.asList(cleartextFolder, vault), ProgressListener.noop).run(session);
}
}
@@ -16,14 +16,14 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.NullFilter;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.TestProtocol;
import ch.cyberduck.core.azure.AbstractAzureTest;
import ch.cyberduck.core.azure.AzureAttributesFinderFeature;
@@ -34,9 +34,9 @@ import ch.cyberduck.core.cryptomator.features.CryptoReadFeature;
import ch.cyberduck.core.features.AttributesFinder;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.features.Find;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamCancelation;
import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.io.StreamProgress;
import ch.cyberduck.core.local.DefaultLocalDirectoryFeature;
import ch.cyberduck.core.notification.DisabledNotificationService;
@@ -51,6 +51,7 @@ import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.transfer.UploadTransfer;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.core.worker.SingleTransferWorker;
import ch.cyberduck.test.IntegrationTest;
@@ -77,8 +78,10 @@ public class CryptoAzureSingleTransferWorkerTest extends AbstractAzureTest {
@Test
public void testUpload() throws Exception {
final Path home = new Path("cyberduck", EnumSet.of(Path.Type.volume, Path.Type.directory));
final CryptoVault cryptomator = new CryptoVault(new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final Path dir1 = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.placeholder));
final Local localDirectory1 = new Local(System.getProperty("java.io.tmpdir"), new AlphanumericRandomStringService().random());
@@ -100,23 +103,23 @@ public class CryptoAzureSingleTransferWorkerTest extends AbstractAzureTest {
public TransferAction prompt(final TransferItem file) {
return TransferAction.overwrite;
}
}, new DisabledTransferErrorCallback(), new DisabledProgressListener(), new DisabledStreamListener(), new DisabledLoginCallback(), new DisabledNotificationService()).run(session));
}, new DisabledTransferErrorCallback(), ProgressListener.noop, StreamListener.noop, LoginCallback.noop, new DisabledNotificationService()).run(session));
assertTrue(cryptomator.getFeature(session, Find.class, new AzureFindFeature(session)).find(dir1));
assertEquals(content.length, cryptomator.getFeature(session, AttributesFinder.class, new AzureAttributesFinderFeature(session)).find(file1).getSize());
{
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
final InputStream in = new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(file1, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream in = new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(file1, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(in, buffer);
assertArrayEquals(content, buffer.toByteArray());
}
assertEquals(content.length, cryptomator.getFeature(session, AttributesFinder.class, new AzureAttributesFinderFeature(session)).find(file2).getSize());
{
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
final InputStream in = new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(file1, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream in = new CryptoReadFeature(session, new AzureReadFeature(session), cryptomator).read(file1, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(StreamCancelation.noop, StreamProgress.noop).transfer(in, buffer);
assertArrayEquals(content, buffer.toByteArray());
}
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(file1, file2, dir1, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new AzureDeleteFeature(session)).delete(Arrays.asList(file1, file2, dir1, vault), LoginCallback.noop, new Delete.DisabledCallback());
localFile1.delete();
localFile2.delete();
localDirectory1.delete();
@@ -16,22 +16,22 @@ package ch.cyberduck.core.worker;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.NullFilter;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.TestProtocol;
import ch.cyberduck.core.azure.AbstractAzureTest;
import ch.cyberduck.core.azure.AzureDeleteFeature;
import ch.cyberduck.core.azure.AzureWriteFeature;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.SHA256ChecksumCompute;
import ch.cyberduck.core.io.StatusOutputStream;
import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.local.TemporaryFileServiceFactory;
import ch.cyberduck.core.notification.DisabledNotificationService;
import ch.cyberduck.core.transfer.DisabledTransferErrorCallback;
@@ -67,13 +67,13 @@ public class AzureSingleTransferWorkerTest extends AbstractAzureTest {
{
final byte[] content = RandomUtils.nextBytes(39864);
final TransferStatus writeStatus = new TransferStatus().setLength(content.length).setChecksum(new SHA256ChecksumCompute().compute(new ByteArrayInputStream(content), new TransferStatus()));
final StatusOutputStream out = new AzureWriteFeature(session).write(test, writeStatus, new DisabledConnectionCallback());
final StatusOutputStream out = new AzureWriteFeature(session).write(test, writeStatus, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(writeStatus, writeStatus).withLimit((long) content.length).transfer(new ByteArrayInputStream(content), out);
}
final byte[] content = RandomUtils.nextBytes(39864);
final TransferStatus writeStatus = new TransferStatus().setExists(true).setLength(content.length).setChecksum(new SHA256ChecksumCompute().compute(new ByteArrayInputStream(content), new TransferStatus()));
final StatusOutputStream<Void> out = new AzureWriteFeature(session).write(test, writeStatus, new DisabledConnectionCallback());
final StatusOutputStream<Void> out = new AzureWriteFeature(session).write(test, writeStatus, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(writeStatus, writeStatus).withLimit((long) content.length).transfer(new ByteArrayInputStream(content), out);
out.close();
@@ -84,9 +84,9 @@ public class AzureSingleTransferWorkerTest extends AbstractAzureTest {
return TransferAction.overwrite;
}
}, new DisabledTransferErrorCallback(),
new DisabledProgressListener(), new DisabledStreamListener(), new DisabledLoginCallback(), new DisabledNotificationService()).run(session));
ProgressListener.noop, StreamListener.noop, LoginCallback.noop, new DisabledNotificationService()).run(session));
assertArrayEquals(content, IOUtils.toByteArray(localFile.getInputStream()));
new AzureDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new AzureDeleteFeature(session).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
localFile.delete();
}
}
@@ -16,11 +16,11 @@ package ch.cyberduck.core.worker;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathCache;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.azure.AbstractAzureTest;
import ch.cyberduck.core.azure.AzureDirectoryFeature;
import ch.cyberduck.core.azure.AzureFindFeature;
@@ -49,11 +49,11 @@ public class CopyWorkerTest extends AbstractAzureTest {
final Path target = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
new AzureTouchFeature(session).touch(new AzureWriteFeature(session), source, new TransferStatus());
assertTrue(new AzureFindFeature(session).find(source));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(new AzureFindFeature(session).find(source));
assertTrue(new AzureFindFeature(session).find(target));
new DeleteWorker(new DisabledLoginCallback(), Arrays.asList(source, target), new DisabledProgressListener()).run(session);
new DeleteWorker(LoginCallback.noop, Arrays.asList(source, target), ProgressListener.noop).run(session);
}
@Test
@@ -67,11 +67,11 @@ public class CopyWorkerTest extends AbstractAzureTest {
new AzureDirectoryFeature(session).mkdir(new AzureWriteFeature(session), targetFolder, new TransferStatus());
assertTrue(new AzureFindFeature(session).find(targetFolder));
// copy file into vault
final CopyWorker worker = new CopyWorker(Collections.singletonMap(sourceFile, targetFile), new SessionPool.SingleSessionPool(session), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(sourceFile, targetFile), new SessionPool.SingleSessionPool(session), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(new AzureFindFeature(session).find(sourceFile));
assertTrue(new AzureFindFeature(session).find(targetFile));
new DeleteWorker(new DisabledLoginCallback(), Arrays.asList(sourceFile, targetFolder), new DisabledProgressListener()).run(session);
new DeleteWorker(LoginCallback.noop, Arrays.asList(sourceFile, targetFolder), ProgressListener.noop).run(session);
}
@Test
@@ -86,12 +86,12 @@ public class CopyWorkerTest extends AbstractAzureTest {
// move directory into vault
final Path targetFolder = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path targetFile = new Path(targetFolder, sourceFile.getName(), EnumSet.of(Path.Type.file));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(folder, targetFolder), new SessionPool.SingleSessionPool(session), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(folder, targetFolder), new SessionPool.SingleSessionPool(session), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(new AzureFindFeature(session).find(targetFolder));
assertTrue(new AzureFindFeature(session).find(targetFile));
assertTrue(new AzureFindFeature(session).find(folder));
assertTrue(new AzureFindFeature(session).find(sourceFile));
new DeleteWorker(new DisabledLoginCallback(), Arrays.asList(folder, targetFolder), new DisabledProgressListener()).run(session);
new DeleteWorker(LoginCallback.noop, Arrays.asList(folder, targetFolder), ProgressListener.noop).run(session);
}
}
+2 -2
View File
@@ -19,7 +19,7 @@
<parent>
<artifactId>parent</artifactId>
<groupId>ch.cyberduck</groupId>
<version>9.3.0-SNAPSHOT</version>
<version>9.5.0-SNAPSHOT</version>
</parent>
<artifactId>backblaze</artifactId>
<packaging>jar</packaging>
@@ -33,7 +33,7 @@
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20250517</version>
<version>20251224</version>
</dependency>
</dependencies>
</dependencyManagement>
@@ -17,6 +17,7 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.Acl;
import ch.cyberduck.core.DefaultIOExceptionMappingService;
import ch.cyberduck.core.DefaultPathAttributes;
import ch.cyberduck.core.DefaultPathContainerService;
import ch.cyberduck.core.ListProgressListener;
import ch.cyberduck.core.Path;
@@ -70,7 +71,7 @@ public class B2AttributesFinderFeature implements AttributesFinder, AttributesAd
// Pending large file upload
final Write.Append append = new B2LargeUploadService(session, fileid).append(file, new TransferStatus());
if(append.append) {
return new PathAttributes().setSize(append.offset);
return new DefaultPathAttributes().setSize(append.offset);
}
return PathAttributes.EMPTY;
}
@@ -145,7 +146,7 @@ public class B2AttributesFinderFeature implements AttributesFinder, AttributesAd
}
protected PathAttributes toAttributes(final B2FileInfoResponse response) {
final PathAttributes attributes = new PathAttributes();
final PathAttributes attributes = new DefaultPathAttributes();
if(response.getFileInfo().containsKey(X_BZ_INFO_LARGE_FILE_SHA1)) {
attributes.setChecksum(Checksum.parse(response.getFileInfo().get(X_BZ_INFO_LARGE_FILE_SHA1)));
}
@@ -197,7 +198,7 @@ public class B2AttributesFinderFeature implements AttributesFinder, AttributesAd
}
protected PathAttributes toAttributes(final B2FileResponse response) {
final PathAttributes attributes = new PathAttributes();
final PathAttributes attributes = new DefaultPathAttributes();
attributes.setSize(response.getContentLength());
if(response.getFileInfo().containsKey(X_BZ_INFO_LARGE_FILE_SHA1)) {
attributes.setChecksum(Checksum.parse(response.getFileInfo().get(X_BZ_INFO_LARGE_FILE_SHA1)));
@@ -248,7 +249,7 @@ public class B2AttributesFinderFeature implements AttributesFinder, AttributesAd
}
protected PathAttributes toAttributes(final B2BucketResponse response) {
final PathAttributes attributes = new PathAttributes();
final PathAttributes attributes = new DefaultPathAttributes();
attributes.setVersionId(response.getBucketId());
attributes.setRegion(response.getBucketType().name());
switch(response.getBucketType()) {
@@ -259,7 +260,7 @@ public class B2AttributesFinderFeature implements AttributesFinder, AttributesAd
}
protected PathAttributes toAttributes(final B2FinishLargeFileResponse response) {
final PathAttributes attributes = new PathAttributes();
final PathAttributes attributes = new DefaultPathAttributes();
attributes.setSize(response.getContentLength());
if(response.getFileInfo().containsKey(X_BZ_INFO_LARGE_FILE_SHA1)) {
attributes.setChecksum(Checksum.parse(response.getFileInfo().get(X_BZ_INFO_LARGE_FILE_SHA1)));
@@ -33,6 +33,7 @@ import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.EnumSet;
import java.util.Optional;
import synapticloop.b2.BucketType;
import synapticloop.b2.exception.B2ApiException;
@@ -79,23 +80,23 @@ public class B2DirectoryFeature implements Directory<BaseB2Response> {
}
@Override
public void preflight(final Path workdir, final String filename) throws BackgroundException {
public void preflight(final Path workdir, final Optional<String> filename) throws BackgroundException {
if(workdir.isRoot()) {
// Empty argument if not known in validation
if(StringUtils.isNotBlank(filename)) {
if(filename.isPresent()) {
// Bucket names must be a minimum of 6 and a maximum of 50 characters long, and must be globally unique;
// two different B2 accounts cannot have buckets with the name name. Bucket names can consist of: letters,
// digits, and "-". Bucket names cannot start with "b2-"; these are reserved for internal Backblaze use.
if(StringUtils.startsWith(filename, "b2-")) {
if(StringUtils.startsWith(filename.get(), "b2-")) {
throw new InvalidFilenameException(MessageFormat.format(LocaleFactory.localizedString("Cannot create folder {0}", "Error"), filename));
}
if(StringUtils.length(filename) > 50) {
if(StringUtils.length(filename.get()) > 50) {
throw new InvalidFilenameException(MessageFormat.format(LocaleFactory.localizedString("Cannot create folder {0}", "Error"), filename));
}
if(StringUtils.length(filename) < 6) {
if(StringUtils.length(filename.get()) < 6) {
throw new InvalidFilenameException(MessageFormat.format(LocaleFactory.localizedString("Cannot create folder {0}", "Error"), filename));
}
if(!StringUtils.isAlphanumeric(RegExUtils.removeAll(filename, "-"))) {
if(!StringUtils.isAlphanumeric(RegExUtils.removeAll(filename.get(), "-"))) {
throw new InvalidFilenameException(MessageFormat.format(LocaleFactory.localizedString("Cannot create folder {0}", "Error"), filename));
}
}
@@ -17,6 +17,7 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DefaultIOExceptionMappingService;
import ch.cyberduck.core.DefaultPathAttributes;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.PathContainerService;
@@ -129,7 +130,7 @@ public class B2LargeCopyFeature implements Copy {
session.getClient().finishLargeFileUpload(response.getFileId(), checksums.toArray(new String[checksums.size()]));
log.info("Finished large file upload {} with {} parts", target, completed.size());
fileid.cache(target, response.getFileId());
return new Path(target).withAttributes(new PathAttributes(source.attributes()).setVersionId(response.getFileId()));
return new Path(target).withAttributes(new DefaultPathAttributes(source.attributes()).setVersionId(response.getFileId()));
}
catch(B2ApiException e) {
throw new B2ExceptionMappingService(fileid).map("Cannot copy {0}", e, source);
@@ -24,7 +24,7 @@ import ch.cyberduck.core.exception.UnsupportedException;
import ch.cyberduck.core.features.Copy;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.features.Move;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.transfer.TransferStatus;
import java.text.MessageFormat;
@@ -49,7 +49,7 @@ public class B2MoveFeature implements Move {
@Override
public Path move(final Path source, final Path target, final TransferStatus status, final Delete.Callback delete, final ConnectionCallback callback) throws BackgroundException {
final Path copy = proxy.copy(source, target, status, callback, new DisabledStreamListener());
final Path copy = proxy.copy(source, target, status, callback, StreamListener.noop);
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(source)), callback, delete);
return copy;
}
@@ -137,7 +137,7 @@ public class B2ObjectListService implements ListService {
if(StringUtils.isBlank(info.getFileId())) {
// Common prefix
final Path placeholder = new Path(directory.isDirectory() ? directory : directory.getParent(),
PathNormalizer.name(StringUtils.chomp(info.getFileName(), String.valueOf(Path.DELIMITER))),
PathNormalizer.name(StringUtils.removeEnd(info.getFileName(), String.valueOf(Path.DELIMITER))),
EnumSet.of(Path.Type.directory, Path.Type.placeholder));
objects.add(placeholder);
continue;
@@ -17,6 +17,7 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.AttributedList;
import ch.cyberduck.core.DefaultIOExceptionMappingService;
import ch.cyberduck.core.DefaultPathAttributes;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.HostKeyCallback;
import ch.cyberduck.core.ListService;
@@ -92,7 +93,7 @@ public class B2Session extends HttpSession<B2ApiClient> {
if(!response.getBuckets().isEmpty()) {
buckets.addAll(response.getBuckets().entrySet().stream().map(entry ->
new Path(PathNormalizer.normalize(entry.getValue()), EnumSet.of(Path.Type.directory, Path.Type.volume),
new PathAttributes().setVersionId(entry.getKey()))).collect(Collectors.toSet()));
new DefaultPathAttributes().setVersionId(entry.getKey()))).collect(Collectors.toSet()));
}
retryHandler.setTokens(accountId, applicationKey, response.getAuthorizationToken());
if(preferences.getBoolean("b2.upload.largeobject.auto")) {
@@ -26,6 +26,7 @@ import ch.cyberduck.core.transfer.TransferStatus;
import org.apache.commons.io.input.NullInputStream;
import java.text.MessageFormat;
import java.util.Optional;
import synapticloop.b2.response.BaseB2Response;
@@ -41,7 +42,7 @@ public class B2TouchFeature extends DefaultTouchFeature<BaseB2Response> {
}
@Override
public void preflight(final Path workdir, final String filename) throws BackgroundException {
public void preflight(final Path workdir, final Optional<String> filename) throws BackgroundException {
// Creating files is only possible inside a bucket.
if(workdir.isRoot()) {
throw new AccessDeniedException(MessageFormat.format(LocaleFactory.localizedString("Cannot create {0}", "Error"), filename)).withFile(workdir);
@@ -16,15 +16,15 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AttributedList;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ListProgressListener;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.NullFilter;
import ch.cyberduck.core.PasswordCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.VersioningConfiguration;
import ch.cyberduck.core.exception.BackgroundException;
import ch.cyberduck.core.features.Versioning;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.lifecycle.LifecycleConfiguration;
import ch.cyberduck.core.transfer.TransferStatus;
@@ -61,7 +61,7 @@ public class B2VersioningFeature implements Versioning {
@Override
public void revert(final Path file) throws BackgroundException {
new B2CopyFeature(session, fileid).copy(file, file, new TransferStatus(), new DisabledLoginCallback(), new DisabledStreamListener());
new B2CopyFeature(session, fileid).copy(file, file, new TransferStatus(), LoginCallback.noop, StreamListener.noop);
}
@Override
@@ -61,7 +61,7 @@ public class B2WriteFeature extends AbstractHttpWriteFeature<BaseB2Response> imp
= new ThreadLocal<>();
public B2WriteFeature(final B2Session session, final B2VersionIdProvider fileid) {
super(new B2AttributesFinderFeature(session, fileid));
super(session.getHost(), new B2AttributesFinderFeature(session, fileid));
this.session = session;
this.fileid = fileid;
}
@@ -78,7 +78,7 @@ public class B2WriteFeature extends AbstractHttpWriteFeature<BaseB2Response> imp
try {
final Checksum checksum = status.getChecksum();
if(status.isSegment()) {
final B2GetUploadPartUrlResponse uploadUrl = session.getClient().getUploadPartUrl(status.getParameters().get("fileId"));
final B2GetUploadPartUrlResponse uploadUrl = session.getClient().getUploadPartUrl(status.getParameters().get("fileId").toString());
return session.getClient().uploadLargeFilePart(uploadUrl, status.getPart(), entity, checksum.hash);
}
else {
@@ -16,20 +16,19 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.Credentials;
import ch.cyberduck.core.DisabledCancelCallback;
import ch.cyberduck.core.DisabledHostKeyCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordStore;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.HostKeyCallback;
import ch.cyberduck.core.LoginConnectionService;
import ch.cyberduck.core.LoginOptions;
import ch.cyberduck.core.Profile;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.ProtocolFactory;
import ch.cyberduck.core.cryptomator.CryptoVault;
import ch.cyberduck.core.serializer.impl.dd.ProfilePlistReader;
import ch.cyberduck.core.ssl.DefaultX509KeyManager;
import ch.cyberduck.core.ssl.DefaultX509TrustManager;
import ch.cyberduck.core.threading.CancelCallback;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.VaultTest;
import org.junit.After;
@@ -47,11 +46,11 @@ public class AbstractB2Test extends VaultTest {
@Parameterized.Parameters(name = "vaultVersion = {0}")
public static Object[] data() {
return new Object[]{CryptoVault.VAULT_VERSION_DEPRECATED, CryptoVault.VAULT_VERSION};
return new Object[]{VaultVersion.Type.V8, VaultVersion.Type.UVF};
}
@Parameterized.Parameter
public int vaultVersion;
public VaultVersion.Type vaultVersion;
@After
public void disconnect() throws Exception {
@@ -65,17 +64,15 @@ public class AbstractB2Test extends VaultTest {
this.getClass().getResourceAsStream("/B2.cyberduckprofile"));
session = new B2Session(
new Host(profile, profile.getDefaultHostname(),
new Credentials(
PROPERTIES.get("b2.user"), PROPERTIES.get("b2.password")
)), new DefaultX509TrustManager(), new DefaultX509KeyManager());
new Credentials(PROPERTIES.get("b2.user"))), new DefaultX509TrustManager(), new DefaultX509KeyManager());
final LoginConnectionService login = new LoginConnectionService(new DisabledLoginCallback() {
@Override
public Credentials prompt(final Host bookmark, final String title, final String reason, final LoginOptions options) {
fail(reason);
return null;
}
}, new DisabledHostKeyCallback(),
new DisabledPasswordStore(), new DisabledProgressListener());
login.check(session, new DisabledCancelCallback());
}, HostKeyCallback.noop,
new TestPasswordStore(), ProgressListener.noop);
login.check(session, CancelCallback.noop);
}
}
@@ -16,9 +16,9 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.SimplePathPredicate;
@@ -63,7 +63,7 @@ public class B2AttributesFinderFeatureTest extends AbstractB2Test {
assertNotNull(attributes.getVersionId());
assertNull(attributes.getFileId());
assertNotEquals(Checksum.NONE, attributes.getChecksum());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -76,7 +76,7 @@ public class B2AttributesFinderFeatureTest extends AbstractB2Test {
final Path test = new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), new Path(directory, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), status);
assertNotNull(status.getResponse().getVersionId());
assertNotNull(test.attributes().getVersionId());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(test).withAttributes(PathAttributes.EMPTY)), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(test).withAttributes(PathAttributes.EMPTY)), LoginCallback.noop, new Delete.DisabledCallback());
final B2AttributesFinderFeature f = new B2AttributesFinderFeature(session, fileid);
assertEquals(test.attributes(), f.find(test));
try {
@@ -86,8 +86,8 @@ public class B2AttributesFinderFeatureTest extends AbstractB2Test {
catch(NotfoundException e) {
// Expected
}
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(directory, new DisabledListProgressListener()).toList(), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(directory, new DisabledListProgressListener()).toList(), LoginCallback.noop, new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -107,7 +107,7 @@ public class B2AttributesFinderFeatureTest extends AbstractB2Test {
catch(NotfoundException e) {
// Expected
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -119,7 +119,7 @@ public class B2AttributesFinderFeatureTest extends AbstractB2Test {
assertNotNull(attributes);
assertNotEquals(PathAttributes.EMPTY, attributes);
assertEquals(bucket.attributes().getVersionId(), attributes.getVersionId());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -133,11 +133,11 @@ public class B2AttributesFinderFeatureTest extends AbstractB2Test {
final PathAttributes attributes = new B2AttributesFinderFeature(session, fileid).find(file);
assertNotSame(PathAttributes.EMPTY, attributes);
assertEquals(0L, attributes.getSize());
new B2ReadFeature(session, fileid).read(file, new TransferStatus(), new DisabledConnectionCallback()).close();
new B2ReadFeature(session, fileid).read(file, new TransferStatus(), ConnectionCallback.noop).close();
final Path found = new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).find(
new SimplePathPredicate(file));
assertTrue(found.getType().contains(Path.Type.upload));
new B2ReadFeature(session, fileid).read(found, new TransferStatus(), new DisabledConnectionCallback()).close();
new B2ReadFeature(session, fileid).read(found, new TransferStatus(), ConnectionCallback.noop).close();
session.getClient().cancelLargeFileUpload(startResponse.getFileId());
}
@@ -155,7 +155,7 @@ public class B2AttributesFinderFeatureTest extends AbstractB2Test {
fileid.cache(test, invalidId);
final B2AttributesFinderFeature f = new B2AttributesFinderFeature(session, fileid);
assertEquals(latestnodeid, f.find(test).getVersionId());
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).toList(), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).toList(), LoginCallback.noop, new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -17,8 +17,8 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DescriptiveUrl;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.features.Share;
@@ -47,6 +47,6 @@ public class B2AuthorizedUrlProviderTest extends AbstractB2Test {
final DescriptiveUrl url = provider.toDownloadUrl(test, Share.Sharee.world, null, new DisabledPasswordCallback());
assertNotEquals(DescriptiveUrl.EMPTY, url);
assertNotNull(url.getUrl());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,7 +16,7 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.transfer.TransferStatus;
@@ -39,7 +39,7 @@ public class B2BucketTypeFeatureTest extends AbstractB2Test {
final Path bucket = new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume)),
new TransferStatus());
assertEquals("allPrivate", new B2BucketTypeFeature(session, fileid).getLocation(bucket).getIdentifier());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -48,6 +48,6 @@ public class B2BucketTypeFeatureTest extends AbstractB2Test {
final Path bucket = new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume)),
new TransferStatus().setRegion("allPublic"));
assertEquals("allPublic", new B2BucketTypeFeature(session, fileid).getLocation(bucket).getIdentifier());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,13 +16,13 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.exception.UnsupportedException;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.features.Find;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.shared.DefaultFindFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.test.IntegrationTest;
@@ -55,11 +55,11 @@ public class B2CopyFeatureTest extends AbstractB2Test {
assertEquals("Unsupported", e.getMessage());
assertEquals("Cannot copy test-cyberduck.", e.getDetail(false));
}
final Path copy = feature.copy(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), new DisabledConnectionCallback(), new DisabledStreamListener());
final Path copy = feature.copy(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), ConnectionCallback.noop, StreamListener.noop);
assertNotEquals(test.attributes().getVersionId(), copy.attributes().getVersionId());
assertTrue(new B2FindFeature(session, fileid).find(new Path(container, name, EnumSet.of(Path.Type.file))));
assertTrue(new B2FindFeature(session, fileid).find(copy));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -71,10 +71,10 @@ public class B2CopyFeatureTest extends AbstractB2Test {
final String name = new AlphanumericRandomStringService().random();
final Path test = new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), new Path(container, name, EnumSet.of(Path.Type.file)), new TransferStatus());
assertTrue(new B2FindFeature(session, fileid).find(test));
final Path copy = new B2CopyFeature(session, fileid).copy(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), new DisabledConnectionCallback(), new DisabledStreamListener());
final Path copy = new B2CopyFeature(session, fileid).copy(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), ConnectionCallback.noop, StreamListener.noop);
assertTrue(new B2FindFeature(session, fileid).find(new Path(container, name, EnumSet.of(Path.Type.file))));
assertTrue(new B2FindFeature(session, fileid).find(copy));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy, target), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy, target), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -87,10 +87,10 @@ public class B2CopyFeatureTest extends AbstractB2Test {
final Path copy = new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), new Path(folder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus());
assertTrue(new B2FindFeature(session, fileid).find(new Path(folder, name, EnumSet.of(Path.Type.file))));
assertTrue(new B2FindFeature(session, fileid).find(copy));
new B2CopyFeature(session, fileid).copy(test, copy, new TransferStatus().setExists(true), new DisabledConnectionCallback(), new DisabledStreamListener());
new B2CopyFeature(session, fileid).copy(test, copy, new TransferStatus().setExists(true), ConnectionCallback.noop, StreamListener.noop);
final Find find = new DefaultFindFeature(session);
assertTrue(find.find(test));
assertTrue(find.find(copy));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -17,7 +17,7 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.exception.NotfoundException;
@@ -42,7 +42,7 @@ public class B2DeleteFeatureTest extends AbstractB2Test {
public void testDeleteNotFound() throws Exception {
final Path bucket = new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path test = new Path(bucket, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
new B2DeleteFeature(session, new B2VersionIdProvider(session)).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, new B2VersionIdProvider(session)).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -56,12 +56,12 @@ public class B2DeleteFeatureTest extends AbstractB2Test {
assertNotNull(versionId);
// Hide
new B2DeleteFeature(session, new B2VersionIdProvider(session)).delete(Collections.singletonList(test.withAttributes(PathAttributes.EMPTY)),
new DisabledLoginCallback(), new Delete.DisabledCallback());
LoginCallback.noop, new Delete.DisabledCallback());
// Double hide. Ignore failure already_hidden
new B2DeleteFeature(session, new B2VersionIdProvider(session)).delete(Collections.singletonList(test.withAttributes(PathAttributes.EMPTY)),
new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).toList(), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, new B2VersionIdProvider(session)).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
LoginCallback.noop, new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).toList(), LoginCallback.noop, new Delete.DisabledCallback());
new B2DeleteFeature(session, new B2VersionIdProvider(session)).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -70,7 +70,7 @@ public class B2DeleteFeatureTest extends AbstractB2Test {
final Path bucket = new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume)), new TransferStatus());
final Path file = new Path(bucket, String.format("%s %s", new AlphanumericRandomStringService().random(), "1"), EnumSet.of(Path.Type.file));
new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), file, new TransferStatus());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(bucket, file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(bucket, file), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new B2FindFeature(session, fileid).find(file));
assertFalse(new B2FindFeature(session, fileid).find(bucket));
}
@@ -81,16 +81,16 @@ public class B2DeleteFeatureTest extends AbstractB2Test {
final Path bucket = new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume)), new TransferStatus());
final Path file = new Path(bucket, String.format("%s %s", new AlphanumericRandomStringService().random(), "1"), EnumSet.of(Path.Type.file));
new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), file, new TransferStatus());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new B2FindFeature(session, fileid).find(file));
try {
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file.withAttributes(PathAttributes.EMPTY)), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file.withAttributes(PathAttributes.EMPTY)), LoginCallback.noop, new Delete.DisabledCallback());
fail();
}
catch(NotfoundException e) {
//
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -99,11 +99,11 @@ public class B2DeleteFeatureTest extends AbstractB2Test {
final Path bucket = new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume)), new TransferStatus());
final Path file = new Path(bucket, String.format("%s %s", new AlphanumericRandomStringService().random(), "1"), EnumSet.of(Path.Type.file));
new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), file, new TransferStatus());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file.withAttributes(PathAttributes.EMPTY)), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file.withAttributes(PathAttributes.EMPTY)), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new B2FindFeature(session, fileid).find(file));
assertFalse(new DefaultFindFeature(session).find(file));
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).toList(), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, new B2VersionIdProvider(session)).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).toList(), LoginCallback.noop, new Delete.DisabledCallback());
new B2DeleteFeature(session, new B2VersionIdProvider(session)).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -111,7 +111,7 @@ public class B2DeleteFeatureTest extends AbstractB2Test {
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final Path bucket = new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume)), new TransferStatus());
final Path directory = new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), new Path(bucket, String.format("%s %s", new AlphanumericRandomStringService().random(), "1"), EnumSet.of(Path.Type.directory)), new TransferStatus());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(bucket, directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(bucket, directory), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new B2FindFeature(session, fileid).find(directory));
assertFalse(new B2FindFeature(session, fileid).find(bucket));
}
@@ -16,7 +16,7 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.exception.ConflictException;
@@ -31,6 +31,7 @@ import org.junit.experimental.categories.Category;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Optional;
import static org.junit.Assert.*;
@@ -42,10 +43,10 @@ public class B2DirectoryFeatureTest extends AbstractB2Test {
final Path bucket = new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final B2DirectoryFeature feature = new B2DirectoryFeature(session, fileid);
assertTrue(feature.isSupported(bucket.getParent(), bucket.getName()));
assertTrue(feature.isSupported(bucket.getParent(), Optional.of(bucket.getName())));
feature.mkdir(new B2WriteFeature(session, fileid), bucket, new TransferStatus());
assertThrows(ConflictException.class, () -> feature.mkdir(new B2WriteFeature(session, fileid), bucket, new TransferStatus()));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test(expected = ConflictException.class)
@@ -65,7 +66,7 @@ public class B2DirectoryFeatureTest extends AbstractB2Test {
public void testBucketInvalidCharacter() throws Exception {
final Path bucket = new Path("untitled folder", EnumSet.of(Path.Type.directory, Path.Type.volume));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
assertFalse(new B2DirectoryFeature(session, fileid).isSupported(bucket.getParent(), bucket.getName()));
assertFalse(new B2DirectoryFeature(session, fileid).isSupported(bucket.getParent(), Optional.of(bucket.getName())));
try {
new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), bucket, new TransferStatus());
}
@@ -88,11 +89,11 @@ public class B2DirectoryFeatureTest extends AbstractB2Test {
assertNotEquals(PathAttributes.EMPTY, new B2AttributesFinderFeature(session, fileid).find(directory));
assertEquals(directory.attributes().getVersionId(), new B2VersionIdProvider(session).getVersionId(new Path(bucket, filename, EnumSet.of(Path.Type.directory))));
// Mark as hidden
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(directory).withAttributes(PathAttributes.EMPTY)), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(directory).withAttributes(PathAttributes.EMPTY)), LoginCallback.noop, new Delete.DisabledCallback());
// .bzEmpty is deleted not hidden
assertFalse(new B2FindFeature(session, fileid).find(directory));
assertFalse(new DefaultFindFeature(session).find(directory));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -105,6 +106,6 @@ public class B2DirectoryFeatureTest extends AbstractB2Test {
final Path directory = new B2DirectoryFeature(session, fileid).mkdir(
new B2WriteFeature(session, fileid), new Path(bucket, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)), status);
assertEquals(timestamp, new B2AttributesFinderFeature(session, fileid).find(directory).getModificationDate());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -19,7 +19,7 @@ import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.AsciiRandomStringService;
import ch.cyberduck.core.CachingFindFeature;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathCache;
import ch.cyberduck.core.features.Delete;
@@ -49,7 +49,7 @@ public class B2FindFeatureTest extends AbstractB2Test {
new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), file, new TransferStatus());
assertTrue(new B2FindFeature(session, fileid).find(file));
assertFalse(new B2FindFeature(session, fileid).find(new Path(bucket, UUID.randomUUID().toString(), EnumSet.of(Path.Type.file))));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -78,7 +78,7 @@ public class B2FindFeatureTest extends AbstractB2Test {
assertTrue(new B2FindFeature(session, fileid).find(new Path(container, prefix, EnumSet.of(Path.Type.directory, Path.Type.placeholder))));
assertTrue(new B2ObjectListService(session, fileid).list(intermediate,
new DisabledListProgressListener()).contains(test));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new B2FindFeature(session, fileid).find(test));
assertFalse(new B2FindFeature(session, fileid).find(intermediate));
final PathCache cache = new PathCache(1);
@@ -16,13 +16,13 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.features.Find;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.shared.DefaultFindFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.test.IntegrationTest;
@@ -50,21 +50,21 @@ public class B2LargeCopyFeatureTest extends AbstractB2Test {
final String name = new AlphanumericRandomStringService().random();
final byte[] content = RandomUtils.nextBytes(6 * 1000 * 1000);
final Path test = new Path(container, name, EnumSet.of(Path.Type.file));
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus().setLength(content.length)).transfer(new ByteArrayInputStream(content), out);
out.close();
assertTrue(new B2FindFeature(session, fileid).find(test));
final Path copy = new B2LargeCopyFeature(session, fileid, 5 * 1000L * 1000L, 1).copy(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)),
new TransferStatus().setLength(content.length), new DisabledConnectionCallback(), new DisabledStreamListener());
new TransferStatus().setLength(content.length), ConnectionCallback.noop, StreamListener.noop);
assertNotEquals(test.attributes().getVersionId(), copy.attributes().getVersionId());
assertTrue(new B2FindFeature(session, fileid).find(new Path(container, name, EnumSet.of(Path.Type.file))));
assertTrue(new B2FindFeature(session, fileid).find(copy));
final byte[] compare = new byte[content.length];
final InputStream stream = new B2ReadFeature(session, fileid).read(copy, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream stream = new B2ReadFeature(session, fileid).read(copy, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
IOUtils.readFully(stream, compare);
stream.close();
assertArrayEquals(content, compare);
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -76,20 +76,20 @@ public class B2LargeCopyFeatureTest extends AbstractB2Test {
final String name = new AlphanumericRandomStringService().random();
final byte[] content = RandomUtils.nextBytes(6 * 1000 * 1000);
final Path test = new Path(container, name, EnumSet.of(Path.Type.file));
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus().setLength(content.length)).transfer(new ByteArrayInputStream(content), out);
out.close();
assertTrue(new B2FindFeature(session, fileid).find(test));
final Path copy = new B2LargeCopyFeature(session, fileid, 5 * 1000L * 1000L, 1).copy(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)),
new TransferStatus().setLength(content.length), new DisabledConnectionCallback(), new DisabledStreamListener());
new TransferStatus().setLength(content.length), ConnectionCallback.noop, StreamListener.noop);
assertTrue(new B2FindFeature(session, fileid).find(new Path(container, name, EnumSet.of(Path.Type.file))));
assertTrue(new B2FindFeature(session, fileid).find(copy));
final byte[] compare = new byte[content.length];
final InputStream stream = new B2ReadFeature(session, fileid).read(copy, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream stream = new B2ReadFeature(session, fileid).read(copy, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
IOUtils.readFully(stream, compare);
stream.close();
assertArrayEquals(content, compare);
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy, target), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy, target), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -100,17 +100,17 @@ public class B2LargeCopyFeatureTest extends AbstractB2Test {
final String name = new AlphanumericRandomStringService().random();
final byte[] content = RandomUtils.nextBytes(6 * 1000 * 1000);
final Path test = new Path(folder, name, EnumSet.of(Path.Type.file));
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus().setLength(content.length)).transfer(new ByteArrayInputStream(content), out);
out.close();
final Path copy = new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), new Path(folder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus());
assertTrue(new B2FindFeature(session, fileid).find(new Path(folder, name, EnumSet.of(Path.Type.file))));
assertTrue(new B2FindFeature(session, fileid).find(copy));
new B2LargeCopyFeature(session, fileid, 5 * 1000L * 1000L, 1).copy(test, copy,
new TransferStatus().setExists(true).setLength(content.length), new DisabledConnectionCallback(), new DisabledStreamListener());
new TransferStatus().setExists(true).setLength(content.length), ConnectionCallback.noop, StreamListener.noop);
final Find find = new DefaultFindFeature(session);
assertTrue(find.find(test));
assertTrue(find.find(copy));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -18,19 +18,17 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.BytecountStreamListener;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.exception.BackgroundException;
import ch.cyberduck.core.exception.ConnectionTimeoutException;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.features.Write;
import ch.cyberduck.core.io.BandwidthThrottle;
import ch.cyberduck.core.io.Checksum;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.SHA1ChecksumCompute;
import ch.cyberduck.core.io.StreamCancelation;
import ch.cyberduck.core.io.StreamCopier;
@@ -82,8 +80,8 @@ public class B2LargeUploadServiceTest extends AbstractB2Test {
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final B2LargeUploadService upload = new B2LargeUploadService(session, fileid, 5 * 1000L * 1000L, 5);
upload.upload(new B2WriteFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), new DisabledStreamListener(),
status, new DisabledConnectionCallback());
upload.upload(new B2WriteFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, StreamListener.noop,
status, ConnectionCallback.noop);
final PathAttributes attr = new B2AttributesFinderFeature(session, fileid).find(test);
assertNotEquals(Checksum.NONE, attr.getChecksum());
assertEquals(checksum, attr.getChecksum());
@@ -92,13 +90,13 @@ public class B2LargeUploadServiceTest extends AbstractB2Test {
assertEquals(content.length, status.getResponse().getSize());
assertTrue(new DefaultFindFeature(session).find(test));
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), new DisabledConnectionCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), ConnectionCallback.noop);
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
new StreamCopier(status, status).transfer(in, buffer);
in.close();
buffer.close();
assertArrayEquals(content, buffer.toByteArray());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
local.delete();
}
@@ -126,7 +124,7 @@ public class B2LargeUploadServiceTest extends AbstractB2Test {
}
};
try {
service.upload(new B2WriteFeature(session, fileid), test, new Local(System.getProperty("java.io.tmpdir"), name), new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), count, status, new DisabledLoginCallback());
service.upload(new B2WriteFeature(session, fileid), test, new Local(System.getProperty("java.io.tmpdir"), name), new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, count, status, LoginCallback.noop);
}
catch(BackgroundException e) {
// Expected
@@ -141,18 +139,18 @@ public class B2LargeUploadServiceTest extends AbstractB2Test {
assertEquals(0L, resume.offset, 0L);
final TransferStatus append = new TransferStatus().setAppend(true).setLength(content.length);
service.upload(new B2WriteFeature(session, fileid), test, local,
new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), new DisabledStreamListener(), append,
new DisabledLoginCallback());
new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, StreamListener.noop, append,
LoginCallback.noop);
assertEquals(content.length, append.getResponse().getSize());
assertTrue(new B2FindFeature(session, fileid).find(test));
assertEquals(content.length, new B2AttributesFinderFeature(session, fileid).find(test).getSize());
assertTrue(append.isComplete());
final byte[] buffer = new byte[content.length];
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), new DisabledConnectionCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), ConnectionCallback.noop);
IOUtils.readFully(in, buffer);
in.close();
assertArrayEquals(content, buffer);
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
local.delete();
}
@@ -182,7 +180,7 @@ public class B2LargeUploadServiceTest extends AbstractB2Test {
};
final BytecountStreamListener count = new BytecountStreamListener();
try {
feature.upload(new B2WriteFeature(session, fileid), test, new Local(System.getProperty("java.io.tmpdir"), name), new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), count, status, new DisabledLoginCallback());
feature.upload(new B2WriteFeature(session, fileid), test, new Local(System.getProperty("java.io.tmpdir"), name), new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, count, status, LoginCallback.noop);
}
catch(BackgroundException e) {
// Expected
@@ -200,19 +198,19 @@ public class B2LargeUploadServiceTest extends AbstractB2Test {
assertEquals(5 * 1000L * 1000L, new B2AttributesFinderFeature(session, fileid).find(upload).getSize(), 0L);
final TransferStatus append = new TransferStatus().setAppend(true).setLength(2L * 1000L * 1000L).setOffset(5 * 1000L * 1000L);
feature.upload(new B2WriteFeature(session, fileid), test, local,
new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), count, append,
new DisabledLoginCallback());
new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, count, append,
LoginCallback.noop);
assertEquals(6 * 1000L * 1000L, count.getSent());
assertTrue(append.isComplete());
assertEquals(content.length, append.getResponse().getSize());
assertTrue(new B2FindFeature(session, fileid).find(test));
assertEquals(6 * 1000L * 1000L, new B2AttributesFinderFeature(session, fileid).find(test).getSize(), 0L);
final byte[] buffer = new byte[content.length];
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), new DisabledConnectionCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), ConnectionCallback.noop);
IOUtils.readFully(in, buffer);
in.close();
assertArrayEquals(content, buffer);
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
local.delete();
}
}
@@ -16,8 +16,8 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.io.StatusOutputStream;
@@ -54,7 +54,7 @@ public class B2LargeUploadWriteFeatureTest extends AbstractB2Test {
status.setLength(-1L);
status.setModified(1503654614004L);
final Path file = new Path(container, UUID.randomUUID().toString(), EnumSet.of(Path.Type.file));
final StatusOutputStream<BaseB2Response> out = feature.write(file, status, new DisabledConnectionCallback());
final StatusOutputStream<BaseB2Response> out = feature.write(file, status, ConnectionCallback.noop);
final byte[] content = RandomUtils.nextBytes(6 * 1024 * 1024);
final ByteArrayInputStream in = new ByteArrayInputStream(content);
assertEquals(content.length, IOUtils.copy(in, out));
@@ -63,12 +63,12 @@ public class B2LargeUploadWriteFeatureTest extends AbstractB2Test {
assertEquals(content.length, ((B2FinishLargeFileResponse) out.getStatus()).getContentLength(), 0L);
assertTrue(new B2FindFeature(session, fileid).find(file));
final byte[] compare = new byte[content.length];
final InputStream stream = new B2ReadFeature(session, fileid).read(file, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream stream = new B2ReadFeature(session, fileid).read(file, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
IOUtils.readFully(stream, compare);
stream.close();
assertArrayEquals(content, compare);
assertEquals(1503654614004L, new B2AttributesFinderFeature(session, fileid).find(file).getModificationDate());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -80,7 +80,7 @@ public class B2LargeUploadWriteFeatureTest extends AbstractB2Test {
status.setLength(-1L);
status.setModified(1503654614004L);
final Path file = new Path(container, UUID.randomUUID().toString(), EnumSet.of(Path.Type.file));
final StatusOutputStream<BaseB2Response> out = feature.write(file, status, new DisabledConnectionCallback());
final StatusOutputStream<BaseB2Response> out = feature.write(file, status, ConnectionCallback.noop);
final byte[] content = RandomUtils.nextBytes(2 * 1024 * 1024);
final ByteArrayInputStream in = new ByteArrayInputStream(content);
assertEquals(content.length, IOUtils.copy(in, out));
@@ -89,12 +89,12 @@ public class B2LargeUploadWriteFeatureTest extends AbstractB2Test {
assertEquals(content.length, ((B2FileResponse) out.getStatus()).getContentLength(), 0L);
assertTrue(new B2FindFeature(session, fileid).find(file));
final byte[] compare = new byte[content.length];
final InputStream stream = new B2ReadFeature(session, fileid).read(file, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream stream = new B2ReadFeature(session, fileid).read(file, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
IOUtils.readFully(stream, compare);
stream.close();
assertArrayEquals(content, compare);
assertEquals(1503654614004L, new B2AttributesFinderFeature(session, fileid).find(file).getModificationDate());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -107,7 +107,7 @@ public class B2LargeUploadWriteFeatureTest extends AbstractB2Test {
status.setLength(-1L);
status.setModified(1503654614004L);
final Path file = new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final StatusOutputStream<BaseB2Response> out = feature.write(file, status, new DisabledConnectionCallback());
final StatusOutputStream<BaseB2Response> out = feature.write(file, status, ConnectionCallback.noop);
final ByteArrayInputStream in = new ByteArrayInputStream(content);
assertEquals(content.length, IOUtils.copyLarge(in, out));
in.close();
@@ -116,11 +116,11 @@ public class B2LargeUploadWriteFeatureTest extends AbstractB2Test {
assertEquals(content.length, ((B2FileResponse) out.getStatus()).getContentLength(), 0L);
assertTrue(new DefaultFindFeature(session).find(file));
final byte[] compare = new byte[content.length];
final InputStream stream = new B2ReadFeature(session, fileid).read(file, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream stream = new B2ReadFeature(session, fileid).read(file, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
IOUtils.readFully(stream, compare);
stream.close();
assertArrayEquals(content, compare);
assertEquals(1503654614004L, new B2AttributesFinderFeature(session, fileid).find(file).getModificationDate());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,7 +16,7 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.lifecycle.LifecycleConfiguration;
@@ -46,6 +46,6 @@ public class B2LifecycleFeatureTest extends AbstractB2Test {
assertEquals(1, configuration.getTransition(), 0L);
new B2LifecycleFeature(session, fileid).setConfiguration(bucket, LifecycleConfiguration.empty());
assertEquals(LifecycleConfiguration.empty(), new B2LifecycleFeature(session, fileid).getConfiguration(bucket));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,8 +16,8 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.synchronization.Comparison;
@@ -44,12 +44,12 @@ public class B2MoveFeatureTest extends AbstractB2Test {
final Path test = new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), new Path(container, name, EnumSet.of(Path.Type.file)), new TransferStatus());
assertTrue(new B2FindFeature(session, fileid).find(test));
final Path target = new B2MoveFeature(session, fileid).move(test,
new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), new Delete.DisabledCallback(), new DisabledConnectionCallback());
new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), new Delete.DisabledCallback(), ConnectionCallback.noop);
assertNotEquals(test.attributes().getVersionId(), target.attributes().getVersionId());
assertFalse(new B2FindFeature(session, fileid).find(new Path(container, name, EnumSet.of(Path.Type.file))));
assertTrue(new B2FindFeature(session, fileid).find(target));
assertEquals(target.attributes(), new B2AttributesFinderFeature(session, fileid).find(target));
assertEquals(Comparison.equal, session.getHost().getProtocol().getFeature(ComparisonService.class).compare(Path.Type.file, test.attributes(), target.attributes()));
new B2DeleteFeature(session, fileid).delete(Collections.<Path>singletonList(target), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.<Path>singletonList(target), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -18,12 +18,12 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.AsciiRandomStringService;
import ch.cyberduck.core.AttributedList;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DefaultPathAttributes;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.IndexedListProgressListener;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.SimplePathPredicate;
import ch.cyberduck.core.VersioningConfiguration;
import ch.cyberduck.core.exception.NotfoundException;
@@ -76,7 +76,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
}
}).isEmpty());
assertTrue(callback.get());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(folder), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(folder), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -88,7 +88,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertEquals(".", folder.getName());
assertTrue(new B2ObjectListService(session, fileid).list(folder, new DisabledListProgressListener()).isEmpty());
assertTrue(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).contains(folder));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(folder, bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(folder, bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -102,7 +102,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertEquals(folder, test.getParent());
assertTrue(new B2ObjectListService(session, fileid).list(test, new DisabledListProgressListener()).isEmpty());
assertTrue(new B2ObjectListService(session, fileid).list(folder, new DisabledListProgressListener()).contains(test));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, folder, bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, folder, bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -115,7 +115,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertEquals(".", file.getName());
assertEquals(folder, file.getParent());
assertTrue(new B2ObjectListService(session, fileid).list(folder, new DisabledListProgressListener()).contains(file));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(file, folder, bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(file, folder, bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -127,7 +127,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertEquals(bucket, file.getParent());
assertEquals("..", file.getName());
assertTrue(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).contains(file));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(file, bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(file, bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test(expected = NotfoundException.class)
@@ -145,7 +145,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
final Path file = new Path(bucket, new AsciiRandomStringService().random(), EnumSet.of(Path.Type.file));
final TransferStatus status = new TransferStatus().setLength(0L);
status.setChecksum(Checksum.parse("da39a3ee5e6b4b0d3255bfef95601890afd80709"));
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, ConnectionCallback.noop);
IOUtils.write(new byte[0], out);
out.close();
final AttributedList<Path> list = new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener());
@@ -153,9 +153,9 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertNull(list.find(new SimplePathPredicate(file)).attributes().getRevision());
assertEquals(0L, list.find(new SimplePathPredicate(file)).attributes().getSize());
assertSame(bucket, list.find(new SimplePathPredicate(file)).getParent());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
assertFalse(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).contains(file));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -168,7 +168,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
final AttributedList<Path> list = new B2ObjectListService(session, fileid, 1, new VersioningConfiguration(true)).list(bucket, new DisabledListProgressListener());
assertTrue(list.contains(file1));
assertTrue(list.contains(file2));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(bucket, file1, file2), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(bucket, file1, file2), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -183,7 +183,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
final TransferStatus status = new TransferStatus();
status.setLength(content.length);
status.setChecksum(new SHA1ChecksumCompute().compute(new ByteArrayInputStream(content), status));
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, ConnectionCallback.noop);
IOUtils.write(content, out);
out.close();
final B2FileResponse response = (B2FileResponse) out.getStatus();
@@ -202,7 +202,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
final TransferStatus status = new TransferStatus();
status.setLength(content.length);
status.setChecksum(new SHA1ChecksumCompute().compute(new ByteArrayInputStream(content), status));
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, ConnectionCallback.noop);
IOUtils.write(content, out);
out.close();
final B2FileResponse response = (B2FileResponse) out.getStatus();
@@ -216,7 +216,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertEquals(Long.valueOf(1L), list.find(path -> path.attributes().isDuplicate()).attributes().getRevision());
}
// Add hide marker
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file.withAttributes(new PathAttributes(file.attributes()).setVersionId(null))), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file.withAttributes(new DefaultPathAttributes(file.attributes()).setVersionId(null))), LoginCallback.noop, new Delete.DisabledCallback());
{
final AttributedList<Path> list = new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener());
assertEquals(3, list.size());
@@ -242,9 +242,9 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertEquals(list, versions);
assertFalse(versions.contains(other));
for(Path f : list) {
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), LoginCallback.noop, new Delete.DisabledCallback());
}
new B2DeleteFeature(session, fileid).delete(Arrays.asList(other, bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(other, bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -260,7 +260,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
final TransferStatus status = new TransferStatus();
status.setLength(content.length);
status.setChecksum(new SHA1ChecksumCompute().compute(new ByteArrayInputStream(content), status));
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, ConnectionCallback.noop);
IOUtils.write(content, out);
out.close();
final B2FileResponse response = (B2FileResponse) out.getStatus();
@@ -279,7 +279,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
final TransferStatus status = new TransferStatus();
status.setLength(content.length);
status.setChecksum(new SHA1ChecksumCompute().compute(new ByteArrayInputStream(content), status));
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, ConnectionCallback.noop);
IOUtils.write(content, out);
out.close();
final B2FileResponse response = (B2FileResponse) out.getStatus();
@@ -293,7 +293,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertEquals(response.getFileId(), list.find(new SimplePathPredicate(file)).attributes().getVersionId());
}
// Add hide marker
new B2DeleteFeature(session, fileid, VersioningConfiguration.empty()).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid, VersioningConfiguration.empty()).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
assertTrue(new B2ObjectListService(session, fileid, 1, VersioningConfiguration.empty()).list(bucket, new DisabledListProgressListener()).isEmpty());
assertFalse(new B2FindFeature(session, fileid).find(file));
assertFalse(new DefaultFindFeature(session).find(file));
@@ -307,9 +307,9 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
final AttributedList<Path> list = new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener());
assertEquals(list, new B2VersioningFeature(session, fileid).list(file, new DisabledListProgressListener()));
for(Path f : list) {
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), LoginCallback.noop, new Delete.DisabledCallback());
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -337,25 +337,25 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertSame(folder1, list.find(new SimplePathPredicate(file1)).getParent());
assertSame(folder1, list.find(new SimplePathPredicate(folder2)).getParent());
// Nullify version to add delete marker
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(file2).withAttributes(new PathAttributes(file2.attributes()).setVersionId(null))), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(file2).withAttributes(new DefaultPathAttributes(file2.attributes()).setVersionId(null))), LoginCallback.noop, new Delete.DisabledCallback());
assertTrue(new B2ObjectListService(session, fileid, 1, VersioningConfiguration.empty()).list(folder2, new DisabledListProgressListener()).isEmpty());
assertFalse(new B2ObjectListService(session, fileid).list(folder2, new DisabledListProgressListener()).isEmpty());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(folder2), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(folder2), LoginCallback.noop, new Delete.DisabledCallback());
assertTrue(new B2ObjectListService(session, fileid).list(folder2, new DisabledListProgressListener()).contains(file2));
assertThrows(NotfoundException.class, () -> new B2ObjectListService(session, fileid, 1, VersioningConfiguration.empty()).list(folder2, new DisabledListProgressListener()));
// Nullify version to add delete marker
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(file1).withAttributes(new PathAttributes(file1.attributes()).setVersionId(null))), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(file1).withAttributes(new DefaultPathAttributes(file1.attributes()).setVersionId(null))), LoginCallback.noop, new Delete.DisabledCallback());
assertTrue(new B2ObjectListService(session, fileid, 1, VersioningConfiguration.empty()).list(folder1, new DisabledListProgressListener()).isEmpty());
assertTrue(new B2ObjectListService(session, fileid).list(folder1, new DisabledListProgressListener()).contains(folder2));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(folder1), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(folder1), LoginCallback.noop, new Delete.DisabledCallback());
assertThrows(NotfoundException.class, () -> new B2ObjectListService(session, fileid, 1, VersioningConfiguration.empty()).list(folder1, new DisabledListProgressListener()));
for(Path f : new B2ObjectListService(session, fileid).list(folder1, new DisabledListProgressListener())) {
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), LoginCallback.noop, new Delete.DisabledCallback());
}
for(Path f : new B2ObjectListService(session, fileid).list(folder2, new DisabledListProgressListener())) {
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), LoginCallback.noop, new Delete.DisabledCallback());
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -374,7 +374,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertFalse(foundFolder1.attributes().isDuplicate());
}
// Nullify version to add delete marker
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(file1).withAttributes(new PathAttributes(file1.attributes()).setVersionId(null))), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(new Path(file1).withAttributes(new DefaultPathAttributes(file1.attributes()).setVersionId(null))), LoginCallback.noop, new Delete.DisabledCallback());
assertTrue(new B2ObjectListService(session, fileid, 1, VersioningConfiguration.empty()).list(bucket, new DisabledListProgressListener()).isEmpty());
{
final AttributedList<Path> list = new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener());
@@ -382,9 +382,9 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertEquals(folder1, list.iterator().next());
}
for(Path f : new B2ObjectListService(session, fileid).list(folder1, new DisabledListProgressListener())) {
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), LoginCallback.noop, new Delete.DisabledCallback());
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -411,16 +411,16 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertFalse(foundFolder2.attributes().isDuplicate());
}
// Nullify version to add delete marker
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file.withAttributes(new PathAttributes(file.attributes()).setVersionId(null))), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file.withAttributes(new DefaultPathAttributes(file.attributes()).setVersionId(null))), LoginCallback.noop, new Delete.DisabledCallback());
assertTrue(new DefaultFindFeature(session).find(folder1, new DisabledListProgressListener()));
assertTrue(new B2ObjectListService(session, fileid).list(folder1, new DisabledListProgressListener()).contains(folder2));
assertTrue(new DefaultFindFeature(session).find(folder2, new DisabledListProgressListener()));
assertEquals(2, new B2ObjectListService(session, fileid).list(folder2, new DisabledListProgressListener()).size());
assertThrows(NotfoundException.class, () -> new B2ObjectListService(session, fileid, 1, VersioningConfiguration.empty()).list(folder2, new DisabledListProgressListener()));
for(Path f : new B2ObjectListService(session, fileid).list(folder2, new DisabledListProgressListener())) {
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(f), LoginCallback.noop, new Delete.DisabledCallback());
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -435,7 +435,7 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
assertEquals(2, list.size());
assertTrue(list.contains(file1));
assertTrue(list.contains(folder1));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(file1, folder1, bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(file1, folder1, bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -464,8 +464,8 @@ public class B2ObjectListServiceTest extends AbstractB2Test {
});
for(int i = 0; i < list.size(); i++) {
assertEquals(files.get(i), list.get(i).getName());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(list.get(i)), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(list.get(i)), LoginCallback.noop, new Delete.DisabledCallback());
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(directory), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,20 +16,20 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.exception.NotfoundException;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.http.HttpResponseOutputStream;
import ch.cyberduck.core.io.BandwidthThrottle;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.SHA1ChecksumCompute;
import ch.cyberduck.core.io.SHA256ChecksumCompute;
import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.shared.DefaultDownloadFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.test.IntegrationTest;
@@ -58,7 +58,7 @@ public class B2ReadFeatureTest extends AbstractB2Test {
@Test(expected = NotfoundException.class)
public void testReadNotFound() throws Exception {
final Path bucket = new Path("test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
new B2ReadFeature(session, new B2VersionIdProvider(session)).read(new Path(bucket, "nosuchname", EnumSet.of(Path.Type.file)), new TransferStatus(), new DisabledConnectionCallback());
new B2ReadFeature(session, new B2VersionIdProvider(session)).read(new Path(bucket, "nosuchname", EnumSet.of(Path.Type.file)), new TransferStatus(), ConnectionCallback.noop);
}
@Test
@@ -70,22 +70,22 @@ public class B2ReadFeatureTest extends AbstractB2Test {
status.setLength(content.length);
status.setChecksum(new SHA1ChecksumCompute().compute(new ByteArrayInputStream(content), status));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, ConnectionCallback.noop);
IOUtils.write(content, out);
out.close();
final Local local = new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
assertEquals(-1L, local.attributes().getSize());
new DefaultDownloadFeature(session).download(new B2ReadFeature(session, fileid), file, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED),
new DisabledStreamListener(), new TransferStatus() {
StreamListener.noop, new TransferStatus() {
@Override
public TransferStatus setLength(long length) {
assertEquals(923L, length);
// Ignore update. As with unknown length for chunked transfer
return this;
}
}, new DisabledLoginCallback());
}, LoginCallback.noop);
assertEquals(923L, local.attributes().getSize());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -97,22 +97,22 @@ public class B2ReadFeatureTest extends AbstractB2Test {
status.setLength(content.length);
status.setChecksum(new SHA1ChecksumCompute().compute(new ByteArrayInputStream(content), status));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(file, status, ConnectionCallback.noop);
IOUtils.write(content, out);
out.close();
{
// Unknown length in status
// Read a single byte
final InputStream in = new B2ReadFeature(session, fileid).read(file, new TransferStatus(), new DisabledConnectionCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(file, new TransferStatus(), ConnectionCallback.noop);
assertNotNull(in.read());
in.close();
}
{
final InputStream in = new B2ReadFeature(session, fileid).read(file, new TransferStatus(), new DisabledConnectionCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(file, new TransferStatus(), ConnectionCallback.noop);
assertNotNull(in);
in.close();
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -129,14 +129,14 @@ public class B2ReadFeatureTest extends AbstractB2Test {
IOUtils.write(content, out);
out.close();
final BaseB2Response reply = new B2SingleUploadService(session).upload(
new B2WriteFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), new DisabledStreamListener(),
new B2WriteFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, StreamListener.noop,
new TransferStatus().setLength(content.length),
new DisabledConnectionCallback());
ConnectionCallback.noop);
final TransferStatus status = new TransferStatus();
status.setLength(content.length);
status.setAppend(true);
status.setOffset(100L);
final InputStream in = new B2ReadFeature(session, fileid).read(test, status.setLength(content.length - 100), new DisabledConnectionCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(test, status.setLength(content.length - 100), ConnectionCallback.noop);
assertNotNull(in);
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length - 100);
new StreamCopier(status, status).transfer(in, buffer);
@@ -144,7 +144,7 @@ public class B2ReadFeatureTest extends AbstractB2Test {
System.arraycopy(content, 100, reference, 0, content.length - 100);
assertArrayEquals(reference, buffer.toByteArray());
in.close();
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -161,14 +161,14 @@ public class B2ReadFeatureTest extends AbstractB2Test {
IOUtils.write(content, out);
out.close();
new B2SingleUploadService(session).upload(
new B2WriteFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), new DisabledStreamListener(),
new B2WriteFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, StreamListener.noop,
new TransferStatus().setLength(content.length),
new DisabledConnectionCallback());
ConnectionCallback.noop);
final TransferStatus status = new TransferStatus();
status.setLength(-1L);
status.setAppend(true);
status.setOffset(100L);
final InputStream in = new B2ReadFeature(session, fileid).read(test, status, new DisabledConnectionCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(test, status, ConnectionCallback.noop);
assertNotNull(in);
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length - 100);
new StreamCopier(status, status).transfer(in, buffer);
@@ -176,7 +176,7 @@ public class B2ReadFeatureTest extends AbstractB2Test {
System.arraycopy(content, 100, reference, 0, content.length - 100);
assertArrayEquals(reference, buffer.toByteArray());
in.close();
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -188,12 +188,12 @@ public class B2ReadFeatureTest extends AbstractB2Test {
final byte[] content = RandomUtils.nextBytes(length);
final TransferStatus status = new TransferStatus().setLength(content.length);
status.setChecksum(new SHA256ChecksumCompute().compute(new ByteArrayInputStream(content), status));
final OutputStream out = new B2WriteFeature(session, fileid).write(file, status, new DisabledConnectionCallback());
final OutputStream out = new B2WriteFeature(session, fileid).write(file, status, ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus()).transfer(new ByteArrayInputStream(content), out);
final CountingInputStream in = new CountingInputStream(new B2ReadFeature(session, fileid).read(file, status, new DisabledConnectionCallback()));
final CountingInputStream in = new CountingInputStream(new B2ReadFeature(session, fileid).read(file, status, ConnectionCallback.noop));
in.close();
assertEquals(0L, in.getByteCount(), 0L);
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -209,14 +209,14 @@ public class B2ReadFeatureTest extends AbstractB2Test {
test.attributes().setVersionId(invalidId);
fileid.cache(test, invalidId);
try {
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus().setRemote(test.attributes()), new DisabledLoginCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus().setRemote(test.attributes()), LoginCallback.noop);
fail();
}
catch(NotfoundException e) {
//
}
assertNull(test.attributes().getVersionId());
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).toList(), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(new B2ObjectListService(session, fileid).list(bucket, new DisabledListProgressListener()).toList(), LoginCallback.noop, new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -18,7 +18,7 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.AttributedList;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.SimplePathPredicate;
import ch.cyberduck.core.features.Delete;
@@ -52,7 +52,7 @@ public class B2SearchFeatureTest extends AbstractB2Test {
assertNotNull(feature.search(bucket, new SearchFilter(StringUtils.substring(name, 0, name.length() - 2)), new DisabledListProgressListener()).find(new SimplePathPredicate(file)));
final Path subdir = new Path(bucket, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
assertNull(feature.search(subdir, new SearchFilter(name), new DisabledListProgressListener()).find(new SimplePathPredicate(file)));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -65,7 +65,7 @@ public class B2SearchFeatureTest extends AbstractB2Test {
assertNotNull(feature.search(bucket, new SearchFilter(name), new DisabledListProgressListener()).find(new SimplePathPredicate(file)));
assertNotNull(feature.search(new Path("/", EnumSet.of(Path.Type.directory, Path.Type.volume)), new SearchFilter(StringUtils.substring(name, 2)), new DisabledListProgressListener()).find(new SimplePathPredicate(file)));
assertNotNull(feature.search(new Path("/", EnumSet.of(Path.Type.directory, Path.Type.volume)), new SearchFilter(StringUtils.substring(name, 0, name.length() - 2)), new DisabledListProgressListener()).find(new SimplePathPredicate(file)));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -91,6 +91,6 @@ public class B2SearchFeatureTest extends AbstractB2Test {
assertNotNull(result.find(new SimplePathPredicate(filesubdir)));
assertEquals(subdir, result.find(new SimplePathPredicate(filesubdir)).getParent());
}
new B2DeleteFeature(session, fileid).delete(Arrays.asList(file, filesubdir, subdir), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(file, filesubdir, subdir), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,10 +16,9 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.Credentials;
import ch.cyberduck.core.DisabledCancelCallback;
import ch.cyberduck.core.DisabledHostKeyCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.HostKeyCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.ProtocolFactory;
import ch.cyberduck.core.Session;
import ch.cyberduck.core.exception.LoginFailureException;
@@ -31,6 +30,7 @@ import ch.cyberduck.core.proxy.DisabledProxyFinder;
import ch.cyberduck.core.serializer.impl.dd.ProfilePlistReader;
import ch.cyberduck.core.ssl.DefaultX509KeyManager;
import ch.cyberduck.core.ssl.DefaultX509TrustManager;
import ch.cyberduck.core.threading.CancelCallback;
import ch.cyberduck.test.IntegrationTest;
import org.junit.Test;
@@ -61,7 +61,7 @@ public class B2SessionTest {
System.getProperties().getProperty("b2.user"), "s"
));
final B2Session session = new B2Session(host, new DefaultX509TrustManager(), new DefaultX509KeyManager());
session.open(new DisabledProxyFinder(), new DisabledHostKeyCallback(), new DisabledLoginCallback(), new DisabledCancelCallback());
session.login(new DisabledLoginCallback(), new DisabledCancelCallback());
session.open(new DisabledProxyFinder(), HostKeyCallback.noop, LoginCallback.noop, CancelCallback.noop);
session.login(LoginCallback.noop, CancelCallback.noop);
}
}
@@ -16,17 +16,17 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.io.BandwidthThrottle;
import ch.cyberduck.core.io.Checksum;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.SHA1ChecksumCompute;
import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.test.IntegrationTest;
@@ -62,19 +62,19 @@ public class B2SingleUploadServiceTest extends AbstractB2Test {
status.setChecksum(checksum);
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final B2SingleUploadService upload = new B2SingleUploadService(session);
upload.upload(new B2WriteFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), new DisabledStreamListener(),
status, new DisabledConnectionCallback());
upload.upload(new B2WriteFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, StreamListener.noop,
status, ConnectionCallback.noop);
assertEquals(checksum, new B2AttributesFinderFeature(session, fileid).find(test).getChecksum());
status.validate();
assertTrue(status.isComplete());
assertTrue(new B2FindFeature(session, fileid).find(test));
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), new DisabledConnectionCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), ConnectionCallback.noop);
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
new StreamCopier(status, status).transfer(in, buffer);
in.close();
buffer.close();
assertArrayEquals(content, buffer.toByteArray());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
local.delete();
}
}
@@ -16,12 +16,12 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.test.IntegrationTest;
@@ -48,22 +48,22 @@ public class B2ThresholdCopyFeatureTest extends AbstractB2Test{
final String name = new AlphanumericRandomStringService().random();
final byte[] content = RandomUtils.nextBytes(6 * 1000 * 1000);
final Path test = new Path(container, name, EnumSet.of(Path.Type.file));
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus().setLength(content.length)).transfer(new ByteArrayInputStream(content), out);
out.close();
assertTrue(new B2FindFeature(session, fileid).find(test));
final B2ThresholdCopyFeature feature = new B2ThresholdCopyFeature(session, fileid, 5 * 1000L * 1000L);
final Path copy = feature.copy(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)),
new TransferStatus().setLength(content.length), new DisabledConnectionCallback(), new DisabledStreamListener());
new TransferStatus().setLength(content.length), ConnectionCallback.noop, StreamListener.noop);
assertNotEquals(test.attributes().getVersionId(), copy.attributes().getVersionId());
assertTrue(new B2FindFeature(session, fileid).find(new Path(container, name, EnumSet.of(Path.Type.file))));
assertTrue(new B2FindFeature(session, fileid).find(copy));
final byte[] compare = new byte[content.length];
final InputStream stream = new B2ReadFeature(session, fileid).read(copy, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream stream = new B2ReadFeature(session, fileid).read(copy, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
IOUtils.readFully(stream, compare);
stream.close();
assertArrayEquals(content, compare);
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -73,21 +73,21 @@ public class B2ThresholdCopyFeatureTest extends AbstractB2Test{
final String name = new AlphanumericRandomStringService().random();
final byte[] content = RandomUtils.nextBytes(4 * 1000 * 1000);
final Path test = new Path(container, name, EnumSet.of(Path.Type.file));
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final OutputStream out = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus().setLength(content.length)).transfer(new ByteArrayInputStream(content), out);
out.close();
assertTrue(new B2FindFeature(session, fileid).find(test));
final B2ThresholdCopyFeature feature = new B2ThresholdCopyFeature(session, fileid, 5 * 1000L * 1000L);
final Path copy = feature.copy(test, new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)),
new TransferStatus().setLength(content.length), new DisabledConnectionCallback(), new DisabledStreamListener());
new TransferStatus().setLength(content.length), ConnectionCallback.noop, StreamListener.noop);
assertNotEquals(test.attributes().getVersionId(), copy.attributes().getVersionId());
assertTrue(new B2FindFeature(session, fileid).find(new Path(container, name, EnumSet.of(Path.Type.file))));
assertTrue(new B2FindFeature(session, fileid).find(copy));
final byte[] compare = new byte[content.length];
final InputStream stream = new B2ReadFeature(session, fileid).read(copy, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream stream = new B2ReadFeature(session, fileid).read(copy, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
IOUtils.readFully(stream, compare);
stream.close();
assertArrayEquals(content, compare);
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(test, copy), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -17,7 +17,7 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DescriptiveUrl;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.transfer.TransferStatus;
@@ -45,6 +45,6 @@ public class B2UrlProviderTest extends AbstractB2Test {
assertEquals(0, provider.toUrl(bucket).size());
assertEquals(1, provider.toUrl(test).size());
assertNotNull(provider.toUrl(test).find(DescriptiveUrl.Type.http).getUrl());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,8 +16,9 @@ package ch.cyberduck.core.b2;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DefaultPathAttributes;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.exception.NotfoundException;
@@ -52,12 +53,12 @@ public class B2VersionIdProviderTest extends AbstractB2Test {
catch(NotfoundException e) {
// Expected
}
final PathAttributes duplicate = new PathAttributes();
final PathAttributes duplicate = new DefaultPathAttributes();
duplicate.setVersionId("d");
duplicate.setDuplicate(true);
fileid.cache(new Path(file).withAttributes(duplicate), "d");
assertEquals(versionId, fileid.getVersionId(file));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(bucket, file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(bucket, file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -66,7 +67,7 @@ public class B2VersionIdProviderTest extends AbstractB2Test {
final Path bucket = new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), new Path(new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory, Path.Type.volume)), new TransferStatus());
final Path folder = new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), new Path(bucket, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)), new TransferStatus());
assertNotNull(fileid.getVersionId(folder));
new B2DeleteFeature(session, fileid).delete(Arrays.asList(folder, bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(folder, bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -17,9 +17,10 @@ package ch.cyberduck.core.b2;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.AttributedList;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DefaultPathAttributes;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.features.Delete;
@@ -56,18 +57,18 @@ public class B2VersioningFeatureTest extends AbstractB2Test {
final byte[] content = RandomUtils.nextBytes(245);
final TransferStatus status = new TransferStatus().setLength(content.length);
final B2WriteFeature writer = new B2WriteFeature(session, fileid);
final HttpResponseOutputStream<BaseB2Response> out = writer.write(ignored, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = writer.write(ignored, status, ConnectionCallback.noop);
new StreamCopier(status, status).transfer(new ByteArrayInputStream(content), out);
}
assertTrue(new B2FindFeature(session, fileid).find(ignored));
final PathAttributes initialAttributes = new PathAttributes(test.attributes());
final PathAttributes initialAttributes = new DefaultPathAttributes(test.attributes());
final String initialVersion = test.attributes().getVersionId();
final byte[] content = RandomUtils.nextBytes(32769);
final TransferStatus status = new TransferStatus();
status.setLength(content.length);
status.setExists(true);
final B2WriteFeature writer = new B2WriteFeature(session, fileid);
final StatusOutputStream<BaseB2Response> out = writer.write(test, status, new DisabledConnectionCallback());
final StatusOutputStream<BaseB2Response> out = writer.write(test, status, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(status, status).transfer(new ByteArrayInputStream(content), out);
assertNotNull(test.attributes().getVersionId());
@@ -88,8 +89,8 @@ public class B2VersioningFeatureTest extends AbstractB2Test {
assertEquals(status.getResponse().getVersionId(), versions.get(0).attributes().getVersionId());
assertEquals(initialVersion, versions.get(1).attributes().getVersionId());
for(Path version : new B2ListService(session, fileid).list(room, new DisabledListProgressListener())) {
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(version), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(version), LoginCallback.noop, new Delete.DisabledCallback());
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(room), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(room), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -15,9 +15,9 @@ package ch.cyberduck.core.b2;
* GNU General Public License for more details.
*/
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.exception.ChecksumException;
@@ -58,7 +58,7 @@ public class B2WriteFeatureTest extends AbstractB2Test {
final byte[] content = RandomUtils.nextBytes(1);
status.setLength(content.length);
status.setChecksum(Checksum.parse("da39a3ee5e6b4b0d3255bfef95601890afd80709"));
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, new B2VersionIdProvider(session)).write(file, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, new B2VersionIdProvider(session)).write(file, status, ConnectionCallback.noop);
IOUtils.write(content, out);
try {
out.close();
@@ -80,7 +80,7 @@ public class B2WriteFeatureTest extends AbstractB2Test {
status.setLength(content.length);
status.setChecksum(new SHA1ChecksumCompute().compute(new ByteArrayInputStream(content), status));
status.setModified(1503654614004L);
final StatusOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(test, status, new DisabledConnectionCallback());
final StatusOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(test, status, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(new TransferStatus(), new TransferStatus()).transfer(new ByteArrayInputStream(content), out);
final BaseB2Response response = out.getStatus();
@@ -94,16 +94,16 @@ public class B2WriteFeatureTest extends AbstractB2Test {
assertEquals(new B2AttributesFinderFeature(session, fileid).toAttributes(response), attributes);
assertEquals(bucketAttr, new B2AttributesFinderFeature(session, fileid).find(bucket));
final byte[] buffer = new byte[content.length];
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), new DisabledConnectionCallback());
final InputStream in = new B2ReadFeature(session, fileid).read(test, new TransferStatus(), ConnectionCallback.noop);
IOUtils.readFully(in, buffer);
in.close();
assertArrayEquals(content, buffer);
assertEquals(1503654614004L, new B2AttributesFinderFeature(session, fileid).find(test).getModificationDate());
final byte[] overwriteContent = RandomUtils.nextBytes(5);
final StatusOutputStream<BaseB2Response> overwrite = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setExists(true).setLength(overwriteContent.length), new DisabledConnectionCallback());
final StatusOutputStream<BaseB2Response> overwrite = new B2WriteFeature(session, fileid).write(test, new TransferStatus().setExists(true).setLength(overwriteContent.length), ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus()).transfer(new ByteArrayInputStream(overwriteContent), overwrite);
assertNotEquals(new B2AttributesFinderFeature(session, fileid).toAttributes(response), new B2AttributesFinderFeature(session, fileid).toAttributes(overwrite.getStatus()));
assertNotEquals(((B2FileResponse) response).getFileId(), ((B2FileResponse) overwrite.getStatus()).getFileId());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -17,8 +17,8 @@ package ch.cyberduck.core.cryptomator;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.VersioningConfiguration;
import ch.cyberduck.core.b2.AbstractB2Test;
@@ -39,6 +39,7 @@ import ch.cyberduck.core.shared.DefaultFindFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.junit.Test;
@@ -46,13 +47,11 @@ import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.stream.Collectors;
import static org.junit.Assert.*;
import static org.junit.Assume.assumeTrue;
@Category(IntegrationTest.class)
@RunWith(value = Parameterized.class)
@@ -61,9 +60,10 @@ public class B2DirectoryFeatureTest extends AbstractB2Test {
@Test
public void testMakeDirectoryEncrypted() throws Exception {
final Path home = new Path("/test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final Path test = cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
@@ -75,24 +75,9 @@ public class B2DirectoryFeatureTest extends AbstractB2Test {
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(test));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(test));
assertEquals(versionId, cryptomator.getFeature(session, AttributesFinder.class, new B2AttributesFinderFeature(session, fileid)).find(test).getVersionId());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
assertTrue(new CryptoListService(session, new B2ObjectListService(session, fileid, 1, VersioningConfiguration.empty()), cryptomator).list(vault, new DisabledListProgressListener())
.toStream().filter(f -> !f.attributes().isDuplicate()).collect(Collectors.toList()).isEmpty());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Collections.singletonList(vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
}
@Test
public void testMakeDirectoryLongFilenameEncrypted() throws Exception {
assumeTrue(vaultVersion == CryptoVault.VAULT_VERSION_DEPRECATED);
final Path home = new Path("/test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final Path test = cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), new Path(vault, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.directory)), new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(test));
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Collections.singletonList(vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -17,12 +17,12 @@ package ch.cyberduck.core.cryptomator;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.BytecountStreamListener;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2AttributesFinderFeature;
import ch.cyberduck.core.b2.B2DeleteFeature;
@@ -46,6 +46,7 @@ import ch.cyberduck.core.transfer.TransferItem;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.apache.commons.io.IOUtils;
@@ -76,9 +77,10 @@ public class B2LargeUploadServiceTest extends AbstractB2Test {
public void testWrite() throws Exception {
// 5L * 1024L * 1024L
final Path home = new Path("/test-cyberduck", EnumSet.of(Path.Type.volume, Path.Type.directory));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final CryptoUploadFeature<BaseB2Response> service = new CryptoUploadFeature<>(session,
@@ -93,17 +95,17 @@ public class B2LargeUploadServiceTest extends AbstractB2Test {
writeStatus.setLength(content.length);
final Path test = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final BytecountStreamListener counter = new BytecountStreamListener();
service.upload(new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), counter, writeStatus, new DisabledConnectionCallback());
service.upload(new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, counter, writeStatus, ConnectionCallback.noop);
assertEquals(content.length, counter.getSent());
assertTrue(writeStatus.isComplete());
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(test));
assertEquals(content.length, cryptomator.getFeature(session, AttributesFinder.class, new B2AttributesFinderFeature(session, fileid)).find(test).getSize());
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
final TransferStatus readStatus = new TransferStatus().setLength(content.length);
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(test, readStatus, new DisabledConnectionCallback());
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(test, readStatus, ConnectionCallback.noop);
new StreamCopier(readStatus, readStatus).transfer(in, buffer);
assertArrayEquals(content, buffer.toByteArray());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
local.delete();
}
@@ -111,35 +113,36 @@ public class B2LargeUploadServiceTest extends AbstractB2Test {
public void testUploadWithBulk() throws Exception {
// 5L * 1024L * 1024L
final Path home = new Path("/test-cyberduck", EnumSet.of(Path.Type.volume, Path.Type.directory));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path test = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final Path test = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final TransferStatus writeStatus = new TransferStatus();
final int length = 5242885;
final byte[] content = RandomUtils.nextBytes(length);
writeStatus.setLength(content.length);
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final CryptoBulkFeature<Map<TransferItem, TransferStatus>> bulk = new CryptoBulkFeature<>(session, new DisabledBulkFeature(), cryptomator);
bulk.pre(Transfer.Type.upload, Collections.singletonMap(new TransferItem(test), writeStatus), new DisabledConnectionCallback());
bulk.pre(Transfer.Type.upload, Collections.singletonMap(new TransferItem(test), writeStatus), ConnectionCallback.noop);
final CryptoUploadFeature<BaseB2Response> service = new CryptoUploadFeature<>(session,
new B2LargeUploadService(session, fileid, 5000000L, 5),
cryptomator);
final Local local = new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
IOUtils.write(content, local.getOutputStream(false));
final BytecountStreamListener counter = new BytecountStreamListener();
service.upload(new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledProgressListener(), counter, writeStatus, new DisabledConnectionCallback());
service.upload(new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), ProgressListener.noop, counter, writeStatus, ConnectionCallback.noop);
assertEquals(content.length, counter.getSent());
assertTrue(writeStatus.isComplete());
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(test));
assertEquals(content.length, cryptomator.getFeature(session, AttributesFinder.class, new B2AttributesFinderFeature(session, fileid)).find(test).getSize());
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
final TransferStatus readStatus = new TransferStatus().setLength(content.length);
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(test, readStatus, new DisabledConnectionCallback());
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(test, readStatus, ConnectionCallback.noop);
new StreamCopier(readStatus, readStatus).transfer(in, buffer);
assertArrayEquals(content, buffer.toByteArray());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
local.delete();
}
}
@@ -16,9 +16,9 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2DeleteFeature;
@@ -35,6 +35,7 @@ import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.apache.commons.io.IOUtils;
@@ -61,9 +62,10 @@ public class B2LargeUploadWriteFeatureTest extends AbstractB2Test {
@Test
public void testWrite() throws Exception {
final Path container = new Path("test-cyberduck", EnumSet.of(Path.Type.volume, Path.Type.directory));
final CryptoVault cryptomator = new CryptoVault(
new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(container, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final CryptoWriteFeature feature = new CryptoWriteFeature<>(session, new B2LargeUploadWriteFeature(session, fileid), cryptomator);
@@ -73,17 +75,17 @@ public class B2LargeUploadWriteFeatureTest extends AbstractB2Test {
writeStatus.setNonces(new RandomNonceGenerator(cryptomator.getNonceSize()));
writeStatus.setLength(-1L);
final Path test = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final OutputStream out = feature.write(test, writeStatus, new DisabledConnectionCallback());
final OutputStream out = feature.write(test, writeStatus, ConnectionCallback.noop);
final byte[] content = RandomUtils.nextBytes(6 * 1024 * 1024);
final ByteArrayInputStream in = new ByteArrayInputStream(content);
final TransferStatus progress = new TransferStatus();
new StreamCopier(new TransferStatus(), progress).transfer(in, out);
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(test));
final byte[] compare = new byte[content.length];
final InputStream stream = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(test, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream stream = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(test, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
IOUtils.readFully(stream, compare);
stream.close();
assertArrayEquals(content, compare);
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -17,8 +17,8 @@ package ch.cyberduck.core.cryptomator;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledListProgressListener;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2DeleteFeature;
@@ -34,6 +34,7 @@ import ch.cyberduck.core.shared.DefaultTouchFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.junit.Test;
@@ -56,9 +57,10 @@ public class B2ListServiceTest extends AbstractB2Test {
@Test
public void testListCryptomator() throws Exception {
final Path home = new Path("test-cyberduck", EnumSet.of(Path.Type.volume, Path.Type.directory));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
assertTrue(new CryptoListService(session, new B2ListService(session, fileid), cryptomator).list(vault, new DisabledListProgressListener()).isEmpty());
@@ -67,6 +69,6 @@ public class B2ListServiceTest extends AbstractB2Test {
new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator), new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus());
test.attributes().setVersionId(new CryptoVersionIdProvider(session, fileid, cryptomator).getVersionId(test));
assertEquals(test, new CryptoListService(session, new B2ListService(session, fileid), cryptomator).list(vault, new DisabledListProgressListener()).get(0));
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,8 +16,8 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2AttributesFinderFeature;
@@ -36,6 +36,7 @@ import ch.cyberduck.core.shared.DefaultTouchFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.junit.Test;
@@ -50,7 +51,6 @@ import java.util.UUID;
import synapticloop.b2.response.BaseB2Response;
import static org.junit.Assert.*;
import static org.junit.Assume.assumeTrue;
@Category(IntegrationTest.class)
@RunWith(value = Parameterized.class)
@@ -59,9 +59,10 @@ public class B2TouchFeatureTest extends AbstractB2Test {
@Test
public void testTouchEncrypted() throws Exception {
final Path home = new Path("/test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final TransferStatus status = new TransferStatus();
@@ -72,33 +73,16 @@ public class B2TouchFeatureTest extends AbstractB2Test {
assertNotNull(test.attributes().getVersionId());
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(test));
assertEquals(test.attributes(), cryptomator.getFeature(session, AttributesFinder.class, new B2AttributesFinderFeature(session, fileid)).find(test));
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
}
@Test
public void testTouchLongFilenameEncrypted() throws Exception {
assumeTrue(vaultVersion == CryptoVault.VAULT_VERSION_DEPRECATED);
final Path home = new Path("/test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final TransferStatus status = new TransferStatus();
final Path test = new CryptoTouchFeature<>(session, new B2TouchFeature(session, fileid), cryptomator).touch(
new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator), new Path(vault, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.file)), status);
assertEquals(0L, test.attributes().getSize());
assertEquals(0L, status.getResponse().getSize());
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(test));
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
public void testTouchEncryptedDefaultFeature() throws Exception {
final Path home = new Path("/test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final TransferStatus status = new TransferStatus();
@@ -108,6 +92,6 @@ public class B2TouchFeatureTest extends AbstractB2Test {
assertEquals(0L, status.getResponse().getSize());
assertNotNull(test.attributes().getVersionId());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(test));
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,9 +16,9 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.b2.AbstractB2Test;
@@ -38,6 +38,7 @@ import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.test.IntegrationTest;
import org.apache.commons.lang3.RandomUtils;
@@ -69,18 +70,19 @@ public class B2WriteFeatureTest extends AbstractB2Test {
final byte[] content = RandomUtils.nextBytes(length);
status.setLength(content.length);
final Path home = new Path("/test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final CryptoVault cryptomator = new CryptoVault(
new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)));
final Path vault = cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final Path test = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final Path test = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
final CryptoWriteFeature<BaseB2Response> writer = new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator);
final FileHeader header = cryptomator.getFileHeaderCryptor().create();
status.setHeader(cryptomator.getFileHeaderCryptor().encryptHeader(header));
status.setNonces(new RotatingNonceGenerator(cryptomator.getNonceSize(), cryptomator.numberOfChunks(content.length)));
status.setChecksum(writer.checksum(test, status).compute(new ByteArrayInputStream(content), status));
final OutputStream out = writer.write(test, status, new DisabledConnectionCallback());
final OutputStream out = writer.write(test, status, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(status, status).transfer(new ByteArrayInputStream(content), out);
out.close();
@@ -88,9 +90,9 @@ public class B2WriteFeatureTest extends AbstractB2Test {
final PathAttributes attributes = cryptomator.getFeature(session, AttributesFinder.class, new B2AttributesFinderFeature(session, fileid)).find(test);
assertEquals(content.length, attributes.getSize());
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(test, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(test, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(status, status).transfer(in, buffer);
assertArrayEquals(content, buffer.toByteArray());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(test, vault), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,12 +16,12 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathCache;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2DirectoryFeature;
import ch.cyberduck.core.b2.B2FindFeature;
@@ -46,6 +46,7 @@ import ch.cyberduck.core.transfer.TransferItem;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.core.worker.CopyWorker;
import ch.cyberduck.core.worker.DeleteWorker;
import ch.cyberduck.test.IntegrationTest;
@@ -66,7 +67,6 @@ import java.util.EnumSet;
import synapticloop.b2.response.BaseB2Response;
import static org.junit.Assert.*;
import static org.junit.Assume.assumeTrue;
@Category(IntegrationTest.class)
@RunWith(value = Parameterized.class)
@@ -78,24 +78,24 @@ public class CopyWorkerTest extends AbstractB2Test {
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path source = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final Path target = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final byte[] content = RandomUtils.nextBytes(40500);
final TransferStatus status = new TransferStatus();
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
new CryptoBulkFeature<>(session, new DisabledBulkFeature(), cryptomator).pre(Transfer.Type.upload, Collections.singletonMap(new TransferItem(source), status), new DisabledConnectionCallback());
new StreamCopier(new TransferStatus(), new TransferStatus()).transfer(new ByteArrayInputStream(content), new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator).write(source, status.setLength(content.length), new DisabledConnectionCallback()));
new CryptoBulkFeature<>(session, new DisabledBulkFeature(), cryptomator).pre(Transfer.Type.upload, Collections.singletonMap(new TransferItem(source), status), ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus()).transfer(new ByteArrayInputStream(content), new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator).write(source, status.setLength(content.length), ConnectionCallback.noop));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(source));
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(target));
final ByteArrayOutputStream out = new ByteArrayOutputStream(content.length);
assertEquals(content.length, IOUtils.copy(new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(target, new TransferStatus().setLength(content.length), new DisabledConnectionCallback()), out));
assertEquals(content.length, IOUtils.copy(new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(target, new TransferStatus().setLength(content.length), ConnectionCallback.noop), out));
assertArrayEquals(content, out.toByteArray());
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
@@ -105,10 +105,10 @@ public class CopyWorkerTest extends AbstractB2Test {
final Path source = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final Path targetFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path target = new Path(targetFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
new CryptoTouchFeature<>(session, new DefaultTouchFeature<BaseB2Response>(
session), cryptomator).touch(new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator), source, new TransferStatus());
@@ -116,39 +116,12 @@ public class CopyWorkerTest extends AbstractB2Test {
cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), targetFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(targetFolder));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(target));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
}
@Test
public void testCopyToDifferentFolderLongFilenameCryptomator() throws Exception {
assumeTrue(vaultVersion == CryptoVault.VAULT_VERSION_DEPRECATED);
final Path home = new Path("/test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path source = new Path(vault, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.file));
final Path targetFolder = new Path(vault, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.directory));
final Path target = new Path(targetFolder, new AlphanumericRandomStringService(130).random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
new CryptoTouchFeature<>(session, new DefaultTouchFeature<BaseB2Response>(
session), cryptomator).touch(new CryptoWriteFeature<>(session, new B2WriteFeature(session, fileid), cryptomator), source, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), targetFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(targetFolder));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(source, target), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(source));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(target));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
@@ -157,10 +130,10 @@ public class CopyWorkerTest extends AbstractB2Test {
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path folder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path file = new Path(folder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), folder, new TransferStatus());
@@ -170,18 +143,18 @@ public class CopyWorkerTest extends AbstractB2Test {
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(file));
// copy file
final Path fileRenamed = new Path(folder, "f1", EnumSet.of(Path.Type.file));
new CopyWorker(Collections.singletonMap(file, fileRenamed), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback()).run(session);
new CopyWorker(Collections.singletonMap(file, fileRenamed), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop).run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(file));
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(fileRenamed));
// copy folder
final Path folderRenamed = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
new CopyWorker(Collections.singletonMap(folder, folderRenamed), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback()).run(session);
new CopyWorker(Collections.singletonMap(folder, folderRenamed), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop).run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(folder));
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(folderRenamed));
final Path fileRenamedInRenamedFolder = new Path(folderRenamed, "f1", EnumSet.of(Path.Type.file));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(fileRenamedInRenamedFolder));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
@@ -194,20 +167,20 @@ public class CopyWorkerTest extends AbstractB2Test {
assertTrue(new B2FindFeature(session, fileid).find(cleartextFile));
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), encryptedFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
// copy file into vault
final CopyWorker worker = new CopyWorker(Collections.singletonMap(cleartextFile, encryptedFile), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(cleartextFile, encryptedFile), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(new B2FindFeature(session, fileid).find(cleartextFile));
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(encryptedFile));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
@@ -221,21 +194,21 @@ public class CopyWorkerTest extends AbstractB2Test {
new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), cleartextFile, new TransferStatus());
assertTrue(new B2FindFeature(session, fileid).find(cleartextFolder));
assertTrue(new B2FindFeature(session, fileid).find(cleartextFile));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
// move directory into vault
final Path encryptedFolder = new Path(vault, cleartextFolder.getName(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, cleartextFile.getName(), EnumSet.of(Path.Type.file));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(cleartextFolder, encryptedFolder), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(cleartextFolder, encryptedFolder), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
assertTrue(new B2FindFeature(session, fileid).find(cleartextFolder));
assertTrue(new B2FindFeature(session, fileid).find(cleartextFile));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Collections.singletonList(vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Collections.singletonList(vault), ProgressListener.noop).run(session);
}
@Test
@@ -247,10 +220,10 @@ public class CopyWorkerTest extends AbstractB2Test {
new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), clearFolder, new TransferStatus());
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), encryptedFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
@@ -259,12 +232,12 @@ public class CopyWorkerTest extends AbstractB2Test {
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
// move file outside vault
final Path cleartextFile = new Path(clearFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(encryptedFile, cleartextFile), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(encryptedFile, cleartextFile), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(encryptedFile));
assertTrue(new B2FindFeature(session, fileid).find(cleartextFile));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Arrays.asList(vault, clearFolder), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Arrays.asList(vault, clearFolder), ProgressListener.noop).run(session);
}
@Test
@@ -273,10 +246,10 @@ public class CopyWorkerTest extends AbstractB2Test {
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), encryptedFolder, new TransferStatus());
@@ -286,14 +259,14 @@ public class CopyWorkerTest extends AbstractB2Test {
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
// copy directory outside vault
final Path cleartextFolder = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final CopyWorker worker = new CopyWorker(Collections.singletonMap(encryptedFolder, cleartextFolder), new SessionPool.SingleSessionPool(session, registry), PathCache.empty(), new DisabledProgressListener(), new DisabledConnectionCallback());
final CopyWorker worker = new CopyWorker(Collections.singletonMap(encryptedFolder, cleartextFolder), new SessionPool.SingleSessionPool(session, session.getRegistry()), PathCache.empty(), ProgressListener.noop, ConnectionCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(encryptedFolder));
assertTrue(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(encryptedFile));
assertTrue(new B2FindFeature(session, fileid).find(cleartextFolder));
final Path fileRenamed = new Path(cleartextFolder, encryptedFile.getName(), EnumSet.of(Path.Type.file));
assertTrue(new B2FindFeature(session, fileid).find(fileRenamed));
registry.clear();
new DeleteWorker(new DisabledLoginCallback(), Arrays.asList(cleartextFolder, vault), new DisabledProgressListener()).run(session);
session.getRegistry().clear();
new DeleteWorker(LoginCallback.noop, Arrays.asList(cleartextFolder, vault), ProgressListener.noop).run(session);
}
}
@@ -16,14 +16,14 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.NullFilter;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.TestProtocol;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2AttributesFinderFeature;
@@ -35,8 +35,8 @@ import ch.cyberduck.core.cryptomator.features.CryptoReadFeature;
import ch.cyberduck.core.features.AttributesFinder;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.features.Find;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.local.DefaultLocalDirectoryFeature;
import ch.cyberduck.core.notification.DisabledNotificationService;
import ch.cyberduck.core.transfer.DisabledTransferErrorCallback;
@@ -50,6 +50,7 @@ import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.transfer.UploadTransfer;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.core.worker.SingleTransferWorker;
import ch.cyberduck.test.IntegrationTest;
@@ -91,8 +92,9 @@ public class CryptoB2SingleTransferWorkerTest extends AbstractB2Test {
final OutputStream out2 = localFile2.getOutputStream(false);
IOUtils.write(content, out2);
out2.close();
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final Transfer t = new UploadTransfer(new Host(new TestProtocol()), Collections.singletonList(new TransferItem(dir1, localDirectory1)), new NullFilter<>());
assertTrue(new SingleTransferWorker(session, session, t, new TransferOptions(), new TransferSpeedometer(t), new DisabledTransferPrompt() {
@@ -101,7 +103,7 @@ public class CryptoB2SingleTransferWorkerTest extends AbstractB2Test {
return TransferAction.overwrite;
}
}, new DisabledTransferErrorCallback(),
new DisabledProgressListener(), new DisabledStreamListener(), new DisabledLoginCallback(), new DisabledNotificationService()) {
ProgressListener.noop, StreamListener.noop, LoginCallback.noop, new DisabledNotificationService()) {
}.run(session));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
@@ -109,18 +111,18 @@ public class CryptoB2SingleTransferWorkerTest extends AbstractB2Test {
assertEquals(content.length, cryptomator.getFeature(session, AttributesFinder.class, new B2AttributesFinderFeature(session, fileid)).find(file1).getSize());
{
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(file1, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(file1, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus()).transfer(in, buffer);
assertArrayEquals(content, buffer.toByteArray());
}
assertEquals(content.length, cryptomator.getFeature(session, AttributesFinder.class, new B2AttributesFinderFeature(session, fileid)).find(file2).getSize());
{
final ByteArrayOutputStream buffer = new ByteArrayOutputStream(content.length);
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(file1, new TransferStatus().setLength(content.length), new DisabledConnectionCallback());
final InputStream in = new CryptoReadFeature(session, new B2ReadFeature(session, fileid), cryptomator).read(file1, new TransferStatus().setLength(content.length), ConnectionCallback.noop);
new StreamCopier(new TransferStatus(), new TransferStatus()).transfer(in, buffer);
assertArrayEquals(content, buffer.toByteArray());
}
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(file1, file2, dir1, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(file1, file2, dir1, vault), LoginCallback.noop, new Delete.DisabledCallback());
localFile1.delete();
localFile2.delete();
localDirectory1.delete();
@@ -16,11 +16,11 @@ package ch.cyberduck.core.cryptomator;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathCache;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2DeleteFeature;
import ch.cyberduck.core.b2.B2DirectoryFeature;
@@ -40,6 +40,7 @@ import ch.cyberduck.core.shared.DefaultFindFeature;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.core.vault.DefaultVaultRegistry;
import ch.cyberduck.core.vault.VaultCredentials;
import ch.cyberduck.core.vault.VaultVersion;
import ch.cyberduck.core.worker.MoveWorker;
import ch.cyberduck.test.IntegrationTest;
@@ -68,20 +69,20 @@ public class MoveWorkerTest extends AbstractB2Test {
assertTrue(new DefaultFindFeature(session).find(clearFile));
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), encryptedFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
// move file into vault
final MoveWorker worker = new MoveWorker(Collections.singletonMap(clearFile, encryptedFile), new SessionPool.SingleSessionPool(session), PathCache.empty(), new DisabledProgressListener(), new DisabledLoginCallback());
final MoveWorker worker = new MoveWorker(Collections.singletonMap(clearFile, encryptedFile), new SessionPool.SingleSessionPool(session), PathCache.empty(), ProgressListener.noop, LoginCallback.noop);
worker.run(session);
assertFalse(new DefaultFindFeature(session).find(clearFile));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(encryptedFile, encryptedFolder, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
registry.clear();
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(encryptedFile, encryptedFolder, vault), LoginCallback.noop, new Delete.DisabledCallback());
session.getRegistry().clear();
}
@Test
@@ -95,21 +96,21 @@ public class MoveWorkerTest extends AbstractB2Test {
new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), clearFile, new TransferStatus());
assertTrue(new DefaultFindFeature(session).find(clearFolder));
assertTrue(new DefaultFindFeature(session).find(clearFile));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
// move directory into vault
final Path encryptedFolder = new Path(vault, clearFolder.getName(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, clearFile.getName(), EnumSet.of(Path.Type.file));
final MoveWorker worker = new MoveWorker(Collections.singletonMap(clearFolder, encryptedFolder), new SessionPool.SingleSessionPool(session), PathCache.empty(), new DisabledProgressListener(), new DisabledLoginCallback());
final MoveWorker worker = new MoveWorker(Collections.singletonMap(clearFolder, encryptedFolder), new SessionPool.SingleSessionPool(session), PathCache.empty(), ProgressListener.noop, LoginCallback.noop);
worker.run(session);
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
assertFalse(new DefaultFindFeature(session).find(clearFolder));
assertThrows(NotfoundException.class, () -> new DefaultFindFeature(session).find(clearFile));
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(encryptedFile, encryptedFolder, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
registry.clear();
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(encryptedFile, encryptedFolder, vault), LoginCallback.noop, new Delete.DisabledCallback());
session.getRegistry().clear();
}
@Test
@@ -121,10 +122,10 @@ public class MoveWorkerTest extends AbstractB2Test {
new B2DirectoryFeature(session, fileid).mkdir(new B2WriteFeature(session, fileid), clearFolder, new TransferStatus());
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), encryptedFolder, new TransferStatus());
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFolder));
@@ -133,13 +134,13 @@ public class MoveWorkerTest extends AbstractB2Test {
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
// move file outside vault
final Path fileRenamed = new Path(clearFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final MoveWorker worker = new MoveWorker(Collections.singletonMap(encryptedFile, fileRenamed), new SessionPool.SingleSessionPool(session), PathCache.empty(), new DisabledProgressListener(), new DisabledLoginCallback());
final MoveWorker worker = new MoveWorker(Collections.singletonMap(encryptedFile, fileRenamed), new SessionPool.SingleSessionPool(session), PathCache.empty(), ProgressListener.noop, LoginCallback.noop);
worker.run(session);
assertFalse(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
assertTrue(new DefaultFindFeature(session).find(fileRenamed));
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(encryptedFolder, vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(fileRenamed, clearFolder), new DisabledLoginCallback(), new Delete.DisabledCallback());
registry.clear();
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Arrays.asList(encryptedFolder, vault), LoginCallback.noop, new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(fileRenamed, clearFolder), LoginCallback.noop, new Delete.DisabledCallback());
session.getRegistry().clear();
}
@Test
@@ -148,10 +149,10 @@ public class MoveWorkerTest extends AbstractB2Test {
final Path vault = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFolder = new Path(vault, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final Path encryptedFile = new Path(encryptedFolder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final CryptoVault cryptomator = new CryptoVault(vault);
cryptomator.create(session, new VaultCredentials("test"), vaultVersion);
final DefaultVaultRegistry registry = new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator);
session.withRegistry(registry);
final DefaultVaultProvider provider = new DefaultVaultProvider(session);
provider.create(session, null, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
final AbstractVault cryptomator = provider.load(session, vault, new VaultVersion(vaultVersion), new VaultCredentials("test"));
session.withRegistry(new DefaultVaultRegistry(new DisabledPasswordCallback(), cryptomator));
final B2VersionIdProvider fileid = new B2VersionIdProvider(session);
cryptomator.getFeature(session, Directory.class, new B2DirectoryFeature(session, fileid)).mkdir(
cryptomator.getFeature(session, Write.class, new B2WriteFeature(session, fileid)), encryptedFolder, new TransferStatus());
@@ -161,15 +162,15 @@ public class MoveWorkerTest extends AbstractB2Test {
assertTrue(cryptomator.getFeature(session, Find.class, new DefaultFindFeature(session)).find(encryptedFile));
// move directory outside vault
final Path directoryRenamed = new Path(home, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory));
final MoveWorker worker = new MoveWorker(Collections.singletonMap(encryptedFolder, directoryRenamed), new SessionPool.SingleSessionPool(session), PathCache.empty(), new DisabledProgressListener(), new DisabledLoginCallback());
final MoveWorker worker = new MoveWorker(Collections.singletonMap(encryptedFolder, directoryRenamed), new SessionPool.SingleSessionPool(session), PathCache.empty(), ProgressListener.noop, LoginCallback.noop);
worker.run(session);
assertFalse(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(encryptedFolder));
assertFalse(cryptomator.getFeature(session, Find.class, new B2FindFeature(session, fileid)).find(encryptedFile));
assertTrue(new B2FindFeature(session, fileid).find(directoryRenamed));
final Path fileRenamed = new Path(directoryRenamed, encryptedFile.getName(), EnumSet.of(Path.Type.file));
assertTrue(new B2FindFeature(session, fileid).find(fileRenamed));
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Collections.singletonList(vault), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(fileRenamed, directoryRenamed), new DisabledLoginCallback(), new Delete.DisabledCallback());
registry.clear();
cryptomator.getFeature(session, Delete.class, new B2DeleteFeature(session, fileid)).delete(Collections.singletonList(vault), LoginCallback.noop, new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Arrays.asList(fileRenamed, directoryRenamed), LoginCallback.noop, new Delete.DisabledCallback());
session.getRegistry().clear();
}
}
@@ -18,8 +18,8 @@ package ch.cyberduck.core.shared;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.Attributes;
import ch.cyberduck.core.CachingAttributesFinderFeature;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ListProgressListener;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.PathCache;
@@ -90,6 +90,6 @@ public class CachingAttributesFinderFeatureTest extends AbstractB2Test {
catch(NotfoundException e) {
// Expected
}
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -18,8 +18,8 @@ package ch.cyberduck.core.shared;
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.CachingAttributesFinderFeature;
import ch.cyberduck.core.CachingFindFeature;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ListProgressListener;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.PathCache;
@@ -59,7 +59,7 @@ public class CachingFindFeatureTest extends AbstractB2Test {
assertTrue(f.find(test));
// Find without version id set in attributes
assertTrue(f.find(new Path(test).withAttributes(PathAttributes.EMPTY)));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -92,7 +92,7 @@ public class CachingFindFeatureTest extends AbstractB2Test {
}).find(new Path(test).withAttributes(PathAttributes.EMPTY)));
// Test wrong type
assertFalse(f.find(new Path(bucket, test.getName(), EnumSet.of(Path.Type.directory))));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(bucket), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,7 +16,7 @@ package ch.cyberduck.core.shared;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2DeleteFeature;
@@ -50,7 +50,7 @@ public class DefaultAttributesFinderFeatureTest extends AbstractB2Test {
new B2TouchFeature(session, fileid).touch(new B2WriteFeature(session, fileid), file, new TransferStatus());
// Find without version id set in attributes
assertNotNull(new DefaultAttributesFinderFeature(session).find(file).getVersionId());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -16,9 +16,9 @@ package ch.cyberduck.core.shared;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2DeleteFeature;
@@ -29,8 +29,8 @@ import ch.cyberduck.core.b2.B2WriteFeature;
import ch.cyberduck.core.features.Delete;
import ch.cyberduck.core.http.HttpResponseOutputStream;
import ch.cyberduck.core.io.BandwidthThrottle;
import ch.cyberduck.core.io.DisabledStreamListener;
import ch.cyberduck.core.io.StreamCopier;
import ch.cyberduck.core.io.StreamListener;
import ch.cyberduck.core.transfer.TransferStatus;
import ch.cyberduck.test.IntegrationTest;
@@ -65,7 +65,7 @@ public class DefaultDownloadFeatureTest extends AbstractB2Test {
new Random().nextBytes(content);
{
final TransferStatus status = new TransferStatus().setLength(content.length);
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(test, status, new DisabledConnectionCallback());
final HttpResponseOutputStream<BaseB2Response> out = new B2WriteFeature(session, fileid).write(test, status, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(status, status).withLimit(new Long(content.length)).transfer(new ByteArrayInputStream(content), out);
out.close();
@@ -74,15 +74,15 @@ public class DefaultDownloadFeatureTest extends AbstractB2Test {
final Local local = new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
final TransferStatus status = new TransferStatus().setLength(content.length);
new DefaultDownloadFeature(session).download(
new B2ReadFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledStreamListener(),
new B2ReadFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), StreamListener.noop,
status,
new DisabledConnectionCallback());
ConnectionCallback.noop);
final byte[] buffer = new byte[content.length];
final InputStream in = local.getInputStream();
IOUtils.readFully(in, buffer);
in.close();
assertArrayEquals(content, buffer);
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
@@ -95,7 +95,7 @@ public class DefaultDownloadFeatureTest extends AbstractB2Test {
new Random().nextBytes(content);
{
final TransferStatus status = new TransferStatus().setLength(content.length);
final OutputStream out = new B2WriteFeature(session, fileid).write(test, status, new DisabledConnectionCallback());
final OutputStream out = new B2WriteFeature(session, fileid).write(test, status, ConnectionCallback.noop);
assertNotNull(out);
new StreamCopier(status, status).withLimit(new Long(content.length)).transfer(new ByteArrayInputStream(content), out);
out.close();
@@ -104,15 +104,15 @@ public class DefaultDownloadFeatureTest extends AbstractB2Test {
{
final TransferStatus status = new TransferStatus().setLength(-1L);
new DefaultDownloadFeature(session).download(
new B2ReadFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), new DisabledStreamListener(),
new B2ReadFeature(session, fileid), test, local, new BandwidthThrottle(BandwidthThrottle.UNLIMITED), StreamListener.noop,
status,
new DisabledConnectionCallback());
ConnectionCallback.noop);
}
final byte[] buffer = new byte[content.length];
final InputStream in = local.getInputStream();
IOUtils.readFully(in, buffer);
in.close();
assertArrayEquals(content, buffer);
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -16,8 +16,8 @@ package ch.cyberduck.core.shared;
*/
import ch.cyberduck.core.AlphanumericRandomStringService;
import ch.cyberduck.core.DisabledConnectionCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2DeleteFeature;
@@ -55,14 +55,14 @@ public class DefaultFindFeatureTest extends AbstractB2Test {
// Find without version id set in attributes
assertTrue(new DefaultFindFeature(session).find(file));
assertTrue(new DefaultFindFeature(session).find(test));
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(file), LoginCallback.noop, new Delete.DisabledCallback());
}
@Test
public void testFindLargeUpload() throws Exception {
final Path bucket = new Path("test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path file = new Path(bucket, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
final StatusOutputStream<BaseB2Response> out = new B2LargeUploadWriteFeature(session, new B2VersionIdProvider(session)).write(file, new TransferStatus(), new DisabledConnectionCallback());
final StatusOutputStream<BaseB2Response> out = new B2LargeUploadWriteFeature(session, new B2VersionIdProvider(session)).write(file, new TransferStatus(), ConnectionCallback.noop);
IOUtils.copyLarge(new ByteArrayInputStream(RandomUtils.nextBytes(100)), out);
out.close();
assertTrue(new DefaultFindFeature(session).find(file));
@@ -15,7 +15,20 @@ package ch.cyberduck.core.worker;
* GNU General Public License for more details.
*/
import ch.cyberduck.core.*;
import ch.cyberduck.core.BytecountStreamListener;
import ch.cyberduck.core.ConnectionCallback;
import ch.cyberduck.core.Credentials;
import ch.cyberduck.core.DisabledPasswordCallback;
import ch.cyberduck.core.DisabledTranscriptListener;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.HostKeyCallback;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.LoginConnectionService;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.ProtocolFactory;
import ch.cyberduck.core.Session;
import ch.cyberduck.core.b2.AbstractB2Test;
import ch.cyberduck.core.b2.B2AttributesFinderFeature;
import ch.cyberduck.core.b2.B2DeleteFeature;
@@ -97,18 +110,18 @@ public class B2ConcurrentTransferWorkerTest extends AbstractB2Test {
return super.getProperty(key);
}
};
final LoginConnectionService connect = new LoginConnectionService(new DisabledLoginCallback(),
new DisabledHostKeyCallback(),
new DisabledPasswordStore(),
new DisabledProgressListener());
final LoginConnectionService connect = new LoginConnectionService(LoginCallback.noop,
HostKeyCallback.noop,
new TestPasswordStore(),
ProgressListener.noop);
final DefaultSessionPool pool = new DefaultSessionPool(connect,
new DefaultVaultRegistry(new DisabledPasswordCallback()), new DisabledTranscriptListener(), host,
new GenericObjectPool<>(new PooledSessionFactory(connect, new DisabledX509TrustManager(), new DefaultX509KeyManager(),
host, new DefaultVaultRegistry(new DisabledPasswordCallback())) {
@Override
public Session create() {
return new B2Session(host.withCredentials(new Credentials(
PROPERTIES.get("b2.user"), PROPERTIES.get("b2.password")
return new B2Session(host.setCredentials(new Credentials(
PROPERTIES.get("b2.user")
)), new DefaultX509TrustManager(), new DefaultX509KeyManager()) {
final B2LargeUploadService upload = new B2LargeUploadService(this, new B2VersionIdProvider(this)
) {
@@ -158,7 +171,7 @@ public class B2ConcurrentTransferWorkerTest extends AbstractB2Test {
public boolean prompt(final TransferItem item, final TransferStatus status, final BackgroundException failure, final int pending) {
return true;
}
}, new DisabledConnectionCallback(), new DisabledProgressListener(), counter, new DisabledNotificationService());
}, ConnectionCallback.noop, ProgressListener.noop, counter, new DisabledNotificationService());
assertTrue(worker.run(session));
local.delete();
@@ -168,6 +181,6 @@ public class B2ConcurrentTransferWorkerTest extends AbstractB2Test {
assertEquals(content.length, counter.getRecv(), 0L);
assertEquals(content.length, counter.getSent(), 0L);
assertTrue(failed.get());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
@@ -17,16 +17,14 @@ package ch.cyberduck.core.worker;
import ch.cyberduck.core.BytecountStreamListener;
import ch.cyberduck.core.Credentials;
import ch.cyberduck.core.DisabledCancelCallback;
import ch.cyberduck.core.DisabledHostKeyCallback;
import ch.cyberduck.core.DisabledLoginCallback;
import ch.cyberduck.core.DisabledPasswordStore;
import ch.cyberduck.core.DisabledProgressListener;
import ch.cyberduck.core.Host;
import ch.cyberduck.core.HostKeyCallback;
import ch.cyberduck.core.Local;
import ch.cyberduck.core.LoginCallback;
import ch.cyberduck.core.LoginConnectionService;
import ch.cyberduck.core.Path;
import ch.cyberduck.core.PathAttributes;
import ch.cyberduck.core.ProgressListener;
import ch.cyberduck.core.ProtocolFactory;
import ch.cyberduck.core.b2.B2AttributesFinderFeature;
import ch.cyberduck.core.b2.B2DeleteFeature;
@@ -41,6 +39,7 @@ import ch.cyberduck.core.notification.DisabledNotificationService;
import ch.cyberduck.core.serializer.impl.dd.ProfilePlistReader;
import ch.cyberduck.core.ssl.DefaultX509KeyManager;
import ch.cyberduck.core.ssl.DefaultX509TrustManager;
import ch.cyberduck.core.threading.CancelCallback;
import ch.cyberduck.core.transfer.DisabledTransferErrorCallback;
import ch.cyberduck.core.transfer.DisabledTransferPrompt;
import ch.cyberduck.core.transfer.Transfer;
@@ -104,8 +103,8 @@ public class B2SingleTransferWorkerTest extends VaultTest {
return super.getProperty(key);
}
};
final B2Session session = new B2Session(host.withCredentials(new Credentials(
PROPERTIES.get("b2.user"), PROPERTIES.get("b2.password")
final B2Session session = new B2Session(host.setCredentials(new Credentials(
PROPERTIES.get("b2.user")
)), new DefaultX509TrustManager(), new DefaultX509KeyManager()) {
final B2LargeUploadService upload = new B2LargeUploadService(this, new B2VersionIdProvider(this)
) {
@@ -137,10 +136,10 @@ public class B2SingleTransferWorkerTest extends VaultTest {
return super._getFeature(type);
}
};
new LoginConnectionService(new DisabledLoginCallback(),
new DisabledHostKeyCallback(),
new DisabledPasswordStore(),
new DisabledProgressListener()).connect(session, new DisabledCancelCallback());
new LoginConnectionService(LoginCallback.noop,
HostKeyCallback.noop,
new TestPasswordStore(),
ProgressListener.noop).check(session, CancelCallback.noop);
final Path bucket = new Path("test-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
final Path test = new Path(bucket, UUID.randomUUID().toString(), EnumSet.of(Path.Type.file));
final Transfer t = new UploadTransfer(host, test, local);
@@ -151,7 +150,7 @@ public class B2SingleTransferWorkerTest extends VaultTest {
return TransferAction.overwrite;
}
}, new DisabledTransferErrorCallback(),
new DisabledProgressListener(), counter, new DisabledLoginCallback(), new DisabledNotificationService()) {
ProgressListener.noop, counter, LoginCallback.noop, new DisabledNotificationService()) {
}.run(session));
local.delete();
@@ -163,6 +162,6 @@ public class B2SingleTransferWorkerTest extends VaultTest {
assertEquals(content.length, counter.getRecv(), 0L);
assertEquals(content.length, counter.getSent(), 0L);
assertTrue(failed.get());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.DisabledCallback());
new B2DeleteFeature(session, fileid).delete(Collections.singletonList(test), LoginCallback.noop, new Delete.DisabledCallback());
}
}
+1 -1
View File
@@ -19,7 +19,7 @@
<parent>
<groupId>ch.cyberduck</groupId>
<artifactId>parent</artifactId>
<version>9.3.0-SNAPSHOT</version>
<version>9.5.0-SNAPSHOT</version>
</parent>
<artifactId>binding</artifactId>
<packaging>jar</packaging>
@@ -66,10 +66,6 @@ public abstract class AlertController extends SheetController implements InputVa
public abstract NSAlert loadAlert();
public NSAlert alert() {
return alert;
}
@Override
public void loadBundle() {
alert = this.loadAlert();
@@ -83,18 +79,6 @@ public abstract class AlertController extends SheetController implements InputVa
final NSWindow window = alert.window();
log.debug("Use window {}", window);
this.setWindow(window);
// Layout alert view on main thread
this.focus(alert);
}
@Override
public void setWindow(final NSWindow window) {
super.setWindow(window);
window.setReleasedWhenClosed(false);
}
protected void focus(final NSAlert alert) {
log.debug("Focus alert {}", alert);
final NSEnumerator buttons = alert.buttons().objectEnumerator();
NSObject button;
while((button = buttons.nextObject()) != null) {
@@ -104,16 +88,29 @@ public abstract class AlertController extends SheetController implements InputVa
}
final NSView accessory = this.getAccessoryView(alert);
if(accessory != null) {
log.debug("Add accessory view {}", accessory);
final NSRect frame = this.getFrame(accessory);
accessory.setFrameSize(frame.size);
alert.setAccessoryView(accessory);
window.makeFirstResponder(accessory);
}
// First call layout and then do any special positioning and sizing of the accessory view prior to running the alert
log.debug("Layout alert {}", alert);
// Layout alert view on main thread
alert.layout();
this.awakeFromNib();
}
@Override
public void focus() {
log.debug("Realculate key view loop for alert {}", alert);
window.recalculateKeyViewLoop();
}
@Override
public void setWindow(final NSWindow window) {
super.setWindow(window);
window.setReleasedWhenClosed(false);
}
protected NSRect getFrame(final NSView accessory) {
final NSRect frame = new NSRect(window.frame().size.width.doubleValue(), accessory.frame().size.height.doubleValue());
final NSEnumerator enumerator = accessory.subviews().objectEnumerator();
@@ -102,13 +102,12 @@ public abstract class SheetController extends WindowController implements InputV
* Implementation with no bundle loaded but window reference only
*/
public static class NoBundleSheetController extends SheetController {
public NoBundleSheetController(final NSWindow window) {
this(window, InputValidator.disabled);
public NoBundleSheetController() {
this(InputValidator.disabled);
}
public NoBundleSheetController(final NSWindow window, final InputValidator callback) {
public NoBundleSheetController(final InputValidator callback) {
super(callback);
this.setWindow(window);
}
@Override
@@ -30,9 +30,4 @@ public class SystemAlertController extends AlertController {
public NSAlert loadAlert() {
return alert;
}
@Override
public NSAlert alert() {
return alert;
}
}
@@ -30,6 +30,7 @@ import ch.cyberduck.core.LocaleFactory;
import ch.cyberduck.core.ProviderHelpServiceFactory;
import ch.cyberduck.core.local.BrowserLauncherFactory;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.rococoa.Foundation;
@@ -59,6 +60,12 @@ public abstract class WindowController extends BundleController implements NSWin
super();
}
@Override
public void awakeFromNib() {
super.awakeFromNib();
this.focus();
}
@Override
public void invalidate() {
listeners.clear();
@@ -84,18 +91,20 @@ public abstract class WindowController extends BundleController implements NSWin
public void setWindow(final NSWindow window) {
this.window = window;
this.window.setFrameAutosaveName(StringUtils.EMPTY);
this.window.recalculateKeyViewLoop();
this.window.setReleasedWhenClosed(true);
this.window.setDelegate(this.id());
this.window.setLevel(NSWindow.NSWindowLevel.NSNormalWindowLevel);
this.window.setCollectionBehavior(window.collectionBehavior()
| NSWindow.NSWindowCollectionBehavior.NSWindowCollectionBehaviorTransient);
}
public NSWindow window() {
return window;
}
public String windowFrameName() {
return this.getBundleName();
}
@Override
public NSView view() {
return window.contentView();
@@ -105,16 +114,22 @@ public abstract class WindowController extends BundleController implements NSWin
* Order front window
*/
public void display() {
this.display(true);
this.display(true, this.isVisible() ? null : this.windowFrameName());
}
/**
* Order front window
*
* @param key Make key window
* @param key Make key window
* @param frameName Property name
*/
public void display(final boolean key) {
public void display(final boolean key, final String frameName) {
this.loadBundle();
if(frameName != null) {
if(window.setFrameUsingName(frameName)) {
log.debug("Restored frame {} for window {}", window.frame(), frameName);
}
}
if(key) {
window.makeKeyAndOrderFront(null);
}
@@ -123,6 +138,13 @@ public abstract class WindowController extends BundleController implements NSWin
}
}
/**
* Make window the key window and select any first responder
*/
public void focus() {
}
/**
* Order out window
*/
@@ -201,6 +223,14 @@ public abstract class WindowController extends BundleController implements NSWin
@Delegate
public void windowWillClose(final NSNotification notification) {
window.endEditingFor(null);
// Save frame rectangle
final String frameName = this.windowFrameName();
if(frameName != null) {
log.debug("Save frame {} for window {}", window.frame(), frameName);
window.saveFrameUsingName(frameName);
}
// Workaround for macOS 26.x bug where closed windows leave an invisible rect that intercepts mouse events
window.setFrame_display_animate(new NSRect(new NSPoint(0, 0), new NSSize(0, 0)), false, false);
log.debug("Window will close {}", notification);
for(WindowListener listener : listeners.toArray(new WindowListener[listeners.size()])) {
listener.windowWillClose();
@@ -786,6 +786,26 @@ public abstract class NSWindow extends NSResponder {
public abstract void update();
/**
* Attempts to make a given responder the first responder for the window.
* <p>
* If responder isnt already the first responder, this method first sends a resignFirstResponder message to the
* object that is the first responder. If that object refuses to resign, it remains the first responder, and this
* method immediately returns false. If the current first responder resigns, this method sends a becomeFirstResponder message to responder. If responder does not accept first responder status, the NSWindow object becomes first responder; in this case, the method returns true even if responder refuses first responder status.
* <p>
* If responder is nil, this method still sends resignFirstResponder to the current first responder. If the current
* first responder refuses to resign, it remains the first responder and this method immediately returns false. If
* the current first responder returns true from resignFirstResponder, the window is made its own first responder
* and this method returns true.
* <p>
* The Application Kit framework uses this method to alter the first responder in response to mouse-down events;
* you can also use it to explicitly set the first responder from within your program. The responder object is typically an NSView object in the windows view hierarchy. If this method is called explicitly, first send acceptsFirstResponder to responder, and do not call makeFirstResponder: if acceptsFirstResponder returns false.
* <p>
* Use initialFirstResponder to the set the first responder to be used when the window is brought onscreen for
* the first time.
*
* @return true when the operation is successful; otherwise, false.
* @see #setInitialFirstResponder(NSView)
* <p>
* Original signature : <code>BOOL makeFirstResponder(NSResponder*)</code><br>
* <i>native declaration : :305</i>
*/
@@ -1052,8 +1072,7 @@ public abstract class NSWindow extends NSResponder {
public abstract boolean isDocumentEdited();
/**
* Original signature : <code>BOOL isVisible()</code><br>
* <i>native declaration : :361</i>
* @return A Boolean value that indicates whether the window is visible onscreen (even when its obscured by other windows).
*/
public abstract boolean isVisible();
@@ -1452,21 +1471,18 @@ public abstract class NSWindow extends NSResponder {
public abstract void setFrameFromString(String string);
/**
* Original signature : <code>void saveFrameUsingName(NSString*)</code><br>
* <i>native declaration : :467</i>
* Saves the windows frame rectangle in the user defaults system under a given name.
* With the companion method setFrameUsingName(_:), you can save and reset an NSWindow objects frame over various launches of an application.
*
* @param name The name under which the frame is to be saved.
*/
public abstract void saveFrameUsingName(String name);
/**
* Set force=YES to use setFrameUsingName on a non-resizable window<br> Original signature : <code>BOOL
* setFrameUsingName(NSString*, BOOL)</code><br>
* <i>native declaration : :469</i>
*/
public abstract boolean setFrameUsingName_force(String name, boolean force);
/**
* Original signature : <code>BOOL setFrameUsingName(NSString*)</code><br>
* <i>native declaration : :470</i>
* Sets the windows frame rectangle by reading the rectangle data stored under a given name from the defaults system.
* The frame is constrained according to the windows minimum and maximum size settings. This method causes a windowWillResize(_:to:) message to be sent to the delegate
*
* @param name The name of the frame to read.
*/
public abstract boolean setFrameUsingName(String name);
@@ -1693,6 +1709,8 @@ public abstract class NSWindow extends NSResponder {
public abstract CGFloat userSpaceScaleFactor();
/**
* The view thats made first responder (also called the key view) the first time the window is placed onscreen.
* <p>
* Original signature : <code>void setInitialFirstResponder(NSView*)</code><br>
* <i>from NSKeyboardUI native declaration : :539</i>
*/
@@ -1771,6 +1789,17 @@ public abstract class NSWindow extends NSResponder {
public abstract boolean autorecalculatesKeyViewLoop();
/**
* Marks the key view loop as dirty and in need of recalculation.
*
* The key view loop is recalculated the next time someone requests the next or previous key view of the window.
* The recalculated loop is based on the geometric order of the views in the window.
*
* If you dont want to maintain the key view loop of your window manually, you can use this method to do it for you.
* When its first loaded, NSWindow calls this method automatically if your window doesnt have a key view loop
* already established. If you add or remove views later, you can call this method manually to update the windows
* key view loop. You can also set the autorecalculatesKeyViewLoop property to have the window recalculate
* the loop automatically.
*
* Original signature : <code>void recalculateKeyViewLoop()</code><br>
* <i>from NSKeyboardUI native declaration : :553</i>
*/
@@ -1,5 +1,4 @@
<Project Sdk="IKVM.NET.Sdk">
<PropertyGroup>
<!--
Only really used in Cyberduck.
@@ -7,13 +6,13 @@
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
<Import Project="$(BuildSupportDir)Cyberduck.Java.props" />
<ItemGroup>
<CyberduckReference Include="Core" />
<PackageReference Include="iterate-ch.IKVM.MSBuild.SkipDuplicates" />
<PackageReference Include="iterate-ch.IKVM.MSBuild.SkipDuplicates">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<Convert Include="$(TargetBuildDir)*.jar" />
</ItemGroup>
</Project>
+13 -5
View File
@@ -21,18 +21,26 @@
-->
<project name="Cyberduck Native Libraries" basedir=".">
<import file="../../build.xml"/>
<import file="../../build.xml" />
<target name="restore" depends="msbuild">
<msbuild buildfile="Cyberduck.Bonjour.msbuildproj">
<msbuild buildfile="Cyberduck.Bonjour.ikvmproj">
<target name="Restore" />
</msbuild>
</target>
<target name="build" if="platform.windows" depends="restore,msbuild">
<msbuild buildfile="Cyberduck.Bonjour.msbuildproj">
<target name="build" depends="restore,msbuild">
<msbuild buildfile="Cyberduck.Bonjour.ikvmproj">
<property name="Configuration" value="${msbuild.configuration}" />
</msbuild>
</target>
</project>
<target name="pack" depends="msbuild">
<msbuild buildfile="Cyberduck.Bonjour.ikvmproj">
<target name="Pack" />
<property name="Configuration" value="${msbuild.configuration}" />
</msbuild>
</target>
</project>
+6 -8
View File
@@ -5,7 +5,7 @@
<groupId>ch.cyberduck</groupId>
<artifactId>parent</artifactId>
<relativePath>../../pom.xml</relativePath>
<version>9.3.0-SNAPSHOT</version>
<version>9.5.0-SNAPSHOT</version>
</parent>
<artifactId>Cyberduck.Bonjour</artifactId>
<packaging>pom</packaging>
@@ -50,17 +50,16 @@
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>install-dll</id>
<phase>verify</phase>
<id>install-nupkg</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<classifier>net472</classifier>
<type>dll</type>
<file>${project.build.directory}/net472/Cyberduck.Bonjour.dll</file>
<type>nupkg</type>
<file>${project.build.directory}/Cyberduck.Bonjour.${project.version}.nupkg</file>
</artifact>
</artifacts>
</configuration>
@@ -76,9 +75,8 @@
<dependency>
<groupId>ch.cyberduck</groupId>
<artifactId>Cyberduck.Core</artifactId>
<classifier>net472</classifier>
<type>nupkg</type>
<version>${project.version}</version>
<type>dll</type>
</dependency>
</dependencies>
</profile>
+6 -5
View File
@@ -15,10 +15,11 @@
<Project>
<PropertyGroup>
<ModulePath Condition="'$(ModulePath)'==''">$(MSBuildThisFileDirectory)</ModulePath>
</PropertyGroup>
<PropertyGroup>
<AssemblyName>Cyberduck.Bonjour.Native</AssemblyName>
<ModulePath Condition="'$(ModulePath)'==''">$(MSBuildThisFileDirectory)</ModulePath>
</PropertyGroup>
<Import Project="../Directory.Build.props" />
<Import Project="../Directory.Build.props" />
</Project>
</Project>

Some files were not shown because too many files have changed in this diff Show More