Files
coolify/tests/Feature/S3StorageFormTest.php
T
Andras BacsaiandClaude Opus 5.5 7f521e496d fix(s3): add a setting to skip TLS verification for S3 storages
S3 storages with a self-signed or private CA certificate failed with
"cURL error 60", because the Coolify container and the backup helper do
not use the CA certificates of the host. The new opt-in setting turns off
the certificate check in the PHP S3 clients and sets MC_INSECURE for mc.

Closes #9762

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:59:52 +01:00

77 lines
2.3 KiB
PHP

<?php
use App\Livewire\Storage\Form;
use App\Models\S3Storage;
use Illuminate\Filesystem\FilesystemAdapter;
use Illuminate\Support\Facades\Storage;
it('tests the S3 connection with the values currently entered in the form', function () {
if (! defined('CURLOPT_RESOLVE')) {
define('CURLOPT_RESOLVE', 10203);
}
$disk = Mockery::mock(FilesystemAdapter::class);
$disk->expects('files')->once()->andReturn([]);
$testedConfig = null;
Storage::expects('build')
->once()
->with(Mockery::on(function (array $config) use (&$testedConfig) {
$testedConfig = $config;
return true;
}))
->andReturn($disk);
$storage = new class extends S3Storage
{
public function save(array $options = []): bool
{
return true;
}
};
$storage->setRawAttributes([
'name' => 'Saved storage',
'description' => 'Saved description',
'endpoint' => 'https://nyc3.digitaloceanspaces.com',
'bucket' => 'old-bucket',
'region' => 'us-east-1',
'key' => null,
'secret' => null,
'is_usable' => false,
'unusable_email_sent' => true,
]);
$form = new class extends Form
{
public function authorize($ability, $arguments = []): void {}
public function dispatch($event, ...$params): void {}
};
$form->storage = $storage;
$form->name = 'Unsaved storage';
$form->description = 'Unsaved description';
$form->endpoint = 'https://s3.amazonaws.com';
$form->bucket = 'new-bucket';
$form->region = 'eu-central-1';
$form->key = 'new-key';
$form->secret = 'new-secret';
$form->usePathStyleEndpoint = false;
$form->skipTlsVerification = true;
$form->isUsable = false;
$form->testConnection();
expect($form->endpoint)->toBe('https://s3.amazonaws.com')
->and($storage->endpoint)->toBe('https://nyc3.digitaloceanspaces.com')
->and($testedConfig)->toMatchArray([
'endpoint' => 'https://s3.amazonaws.com',
'bucket' => 'new-bucket',
'region' => 'eu-central-1',
'key' => 'new-key',
'secret' => 'new-secret',
'use_path_style_endpoint' => false,
])
->and($testedConfig['http']['verify'])->toBeFalse()
->and($form->isUsable)->toBeTrue();
});