2014-10-27 12:00:31 +00:00
|
|
|
<?php
|
|
|
|
/**
|
2015-03-26 10:44:34 +00:00
|
|
|
* @author Joas Schilling <nickvergessen@owncloud.com>
|
|
|
|
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
|
|
|
|
* @author Morris Jobke <hey@morrisjobke.de>
|
2016-01-12 14:02:16 +00:00
|
|
|
* @author Robin McCorkell <robin@mccorkell.me.uk>
|
|
|
|
* @author Thomas Müller <thomas.mueller@tmit.eu>
|
2014-10-27 12:00:31 +00:00
|
|
|
*
|
2016-01-12 14:02:16 +00:00
|
|
|
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
2015-03-26 10:44:34 +00:00
|
|
|
* @license AGPL-3.0
|
2014-10-27 12:00:31 +00:00
|
|
|
*
|
2015-03-26 10:44:34 +00:00
|
|
|
* This code is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License, version 3,
|
|
|
|
* as published by the Free Software Foundation.
|
2014-10-27 12:00:31 +00:00
|
|
|
*
|
2015-03-26 10:44:34 +00:00
|
|
|
* This program is distributed in the hope that it will be useful,
|
2014-10-27 12:00:31 +00:00
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2015-03-26 10:44:34 +00:00
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License, version 3,
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
2014-10-27 12:00:31 +00:00
|
|
|
*
|
|
|
|
*/
|
2015-02-26 10:37:37 +00:00
|
|
|
|
|
|
|
|
2014-10-27 12:00:31 +00:00
|
|
|
namespace Test\Files\Storage;
|
|
|
|
|
2015-11-25 15:58:54 +00:00
|
|
|
/**
|
|
|
|
* Class AmazonS3Migration
|
|
|
|
*
|
|
|
|
* @group DB
|
|
|
|
*
|
|
|
|
* @package Test\Files\Storage
|
|
|
|
*/
|
2014-11-10 21:28:12 +00:00
|
|
|
class AmazonS3Migration extends \Test\TestCase {
|
2014-10-27 12:00:31 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @var \OC\Files\Storage\Storage instance
|
|
|
|
*/
|
|
|
|
protected $instance;
|
|
|
|
|
2014-11-10 21:28:12 +00:00
|
|
|
/** @var array */
|
|
|
|
protected $params;
|
|
|
|
|
|
|
|
/** @var string */
|
|
|
|
protected $oldId;
|
|
|
|
|
|
|
|
/** @var string */
|
|
|
|
protected $newId;
|
|
|
|
|
|
|
|
protected function setUp() {
|
|
|
|
parent::setUp();
|
|
|
|
|
|
|
|
$uuid = $this->getUniqueID();
|
2014-10-27 12:00:31 +00:00
|
|
|
|
|
|
|
$this->params['key'] = 'key'.$uuid;
|
|
|
|
$this->params['secret'] = 'secret'.$uuid;
|
|
|
|
$this->params['bucket'] = 'bucket'.$uuid;
|
|
|
|
|
|
|
|
$this->oldId = 'amazon::' . $this->params['key'] . md5($this->params['secret']);
|
|
|
|
$this->newId = 'amazon::' . $this->params['bucket'];
|
|
|
|
}
|
|
|
|
|
2014-11-10 21:28:12 +00:00
|
|
|
protected function tearDown() {
|
2014-10-27 12:00:31 +00:00
|
|
|
$this->deleteStorage($this->oldId);
|
|
|
|
$this->deleteStorage($this->newId);
|
2014-11-10 21:28:12 +00:00
|
|
|
|
|
|
|
parent::tearDown();
|
2014-10-27 12:00:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testUpdateLegacyOnlyId () {
|
|
|
|
// add storage ids
|
|
|
|
$oldCache = new \OC\Files\Cache\Cache($this->oldId);
|
|
|
|
|
|
|
|
// add file to old cache
|
2015-03-03 09:42:25 +00:00
|
|
|
$fileId = $oldCache->put('foobar', array('size' => 0, 'mtime' => time(), 'mimetype' => 'httpd/directory'));
|
2014-10-27 12:00:31 +00:00
|
|
|
|
|
|
|
try {
|
|
|
|
$this->instance = new \OC\Files\Storage\AmazonS3($this->params);
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
//ignore
|
|
|
|
}
|
|
|
|
$storages = $this->getStorages();
|
|
|
|
|
|
|
|
$this->assertTrue(isset($storages[$this->newId]));
|
|
|
|
$this->assertFalse(isset($storages[$this->oldId]));
|
|
|
|
$this->assertSame((int)$oldCache->getNumericStorageId(), (int)$storages[$this->newId]);
|
|
|
|
|
|
|
|
list($storageId, $path) = \OC\Files\Cache\Cache::getById($fileId);
|
|
|
|
|
|
|
|
$this->assertSame($this->newId, $storageId);
|
2015-03-03 09:42:25 +00:00
|
|
|
$this->assertSame('foobar', $path);
|
2014-10-27 12:00:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testUpdateLegacyAndNewId () {
|
|
|
|
// add storage ids
|
|
|
|
|
|
|
|
$oldCache = new \OC\Files\Cache\Cache($this->oldId);
|
|
|
|
new \OC\Files\Cache\Cache($this->newId);
|
|
|
|
|
|
|
|
// add file to old cache
|
|
|
|
$fileId = $oldCache->put('/', array('size' => 0, 'mtime' => time(), 'mimetype' => 'httpd/directory'));
|
|
|
|
|
|
|
|
try {
|
|
|
|
$this->instance = new \OC\Files\Storage\AmazonS3($this->params);
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
//ignore
|
|
|
|
}
|
|
|
|
$storages = $this->getStorages();
|
|
|
|
|
|
|
|
$this->assertTrue(isset($storages[$this->newId]));
|
|
|
|
$this->assertFalse(isset($storages[$this->oldId]));
|
|
|
|
|
|
|
|
$this->assertNull(\OC\Files\Cache\Cache::getById($fileId), 'old filecache has not been cleared');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $storages
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function getStorages() {
|
|
|
|
$storages = array();
|
|
|
|
$stmt = \OC::$server->getDatabaseConnection()->prepare(
|
|
|
|
'SELECT `numeric_id`, `id` FROM `*PREFIX*storages` WHERE `id` IN (?, ?)'
|
|
|
|
);
|
|
|
|
$stmt->execute(array($this->oldId, $this->newId));
|
|
|
|
while ($row = $stmt->fetch()) {
|
|
|
|
$storages[$row['id']] = $row['numeric_id'];
|
|
|
|
}
|
|
|
|
return $storages;
|
|
|
|
}
|
|
|
|
|
2015-12-07 12:05:27 +00:00
|
|
|
/**
|
|
|
|
* @param string $id
|
|
|
|
*/
|
2014-10-27 12:00:31 +00:00
|
|
|
public function deleteStorage($id) {
|
|
|
|
$stmt = \OC::$server->getDatabaseConnection()->prepare(
|
|
|
|
'DELETE FROM `*PREFIX*storages` WHERE `id` = ?'
|
|
|
|
);
|
|
|
|
$stmt->execute(array($id));
|
|
|
|
}
|
2015-03-03 09:42:25 +00:00
|
|
|
}
|