@ -34,6 +34,66 @@ class Test_Mount_Config_Dummy_Storage {
* Class Test_Mount_Config
*/
class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
private $dataDir ;
private $userHome ;
private $oldAllowedBackends ;
private $allBackends ;
public function setUp () {
\OC_User :: setUserId ( 'test' );
$this -> userHome = \OC_User :: getHome ( 'test' );
mkdir ( $this -> userHome );
$this -> dataDir = \OC_Config :: getValue (
'datadirectory' ,
\OC :: $SERVERROOT . '/data/'
);
$this -> oldAllowedBackends = OCP\Config :: getAppValue (
'files_external' ,
'user_mounting_backends' ,
''
);
$this -> allBackends = OC_Mount_Config :: getBackends ();
OCP\Config :: setAppValue (
'files_external' ,
'user_mounting_backends' ,
implode ( ',' , array_keys ( $this -> allBackends ))
);
OC_Mount_Config :: $skipTest = true ;
}
public function tearDown () {
OC_Mount_Config :: $skipTest = false ;
@ unlink ( $this -> dataDir . '/mount.json' );
@ unlink ( $this -> userHome . '/mount.json' );
rmdir ( $this -> userHome );
OCP\Config :: setAppValue (
'files_external' ,
'user_mounting_backends' ,
$this -> oldAllowedBackends
);
}
/**
* Reads the global config , for checking
*/
private function readGlobalConfig () {
$configFile = $this -> dataDir . '/mount.json' ;
return json_decode ( file_get_contents ( $configFile ), true );
}
/**
* Reads the user config , for checking
*/
private function readUserConfig () {
$configFile = $this -> userHome . '/mount.json' ;
return json_decode ( file_get_contents ( $configFile ), true );
}
/**
* Test mount point validation
*/
@ -42,35 +102,88 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
$mountType = 'user' ;
$applicable = 'all' ;
$isPersonal = false ;
$this -> assertEquals ( false , OC_Mount_Config :: addMountPoint ( '' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
$this -> assertEquals ( false , OC_Mount_Config :: addMountPoint ( '/' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
$this -> assertEquals ( false , OC_Mount_Config :: addMountPoint ( 'Shared' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
$this -> assertEquals ( false , OC_Mount_Config :: addMountPoint ( '/Shared' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
$this -> assertFalse ( OC_Mount_Config :: addMountPoint ( '' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
$this -> assertFalse ( OC_Mount_Config :: addMountPoint ( '/' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
$this -> assertFalse ( OC_Mount_Config :: addMountPoint ( 'Shared' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
$this -> assertFalse ( OC_Mount_Config :: addMountPoint ( '/Shared' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
}
/**
* Test adding a global mount point
*/
public function testAddGlobalMountPoint () {
$mountType = OC_Mount_Config :: MOUNT_TYPE_GLOBAL ;
$applicable = 'all' ;
$isPersonal = false ;
$this -> assertEquals ( true , OC_Mount_Config :: addMountPoint ( '/ext' , '\OC\Files\Storage\SFTP' , array (), $mountType , $applicable , $isPersonal ));
$config = $this -> readGlobalConfig ();
$this -> assertEquals ( 1 , count ( $config ));
$this -> assertTrue ( isset ( $config [ $mountType ]));
$this -> assertTrue ( isset ( $config [ $mountType ][ $applicable ]));
$this -> assertTrue ( isset ( $config [ $mountType ][ $applicable ][ '/$user/files/ext' ]));
$this -> assertEquals (
'\OC\Files\Storage\SFTP' ,
$config [ $mountType ][ $applicable ][ '/$user/files/ext' ][ 'class' ]
);
}
/**
* Test adding a personal mount point
*/
public function testAddMountPointSingleUser () {
\OC_User :: setUserId ( 'test' );
$mountType = 'user' ;
$mountType = OC_Mount_Config :: MOUNT_TYPE_USER ;
$applicable = 'test' ;
$isPersonal = true ;
$this -> assertEquals ( true , OC_Mount_Config :: addMountPoint ( '/ext' , '\OC\Files\Storage\SFTP' , array (), $mountType , $applicable , $isPersonal ));
$config = $this -> readUserConfig ();
$this -> assertEquals ( 1 , count ( $config ));
$this -> assertTrue ( isset ( $config [ $mountType ]));
$this -> assertTrue ( isset ( $config [ $mountType ][ $applicable ]));
$this -> assertTrue ( isset ( $config [ $mountType ][ $applicable ][ '/test/files/ext' ]));
$this -> assertEquals (
'\OC\Files\Storage\SFTP' ,
$config [ $mountType ][ $applicable ][ '/test/files/ext' ][ 'class' ]
);
}
/**
* Test adding a personal mount point using disallowed backend
*/
public function testAddDisallowedBackendMountPointSingleUser () {
$mountType = OC_Mount_Config :: MOUNT_TYPE_USER ;
$applicable = 'test' ;
$isPersonal = true ;
// local
$this -> assertEquals ( false , OC_Mount_Config :: addMountPoint ( '/ext' , '\OC\Files\storage\local' , array (), $mountType , $applicable , $isPersonal ));
// non-local
// FIXME: can't test this yet as the class (write operation) is not mockable
// $this->assertEquals(true, OC_Mount_Config::addMountPoint('/ext', '\OC\Files\Storage\SFTP', array(), $mountType, $applicable, $isPersonal));
$this -> assertFalse ( OC_Mount_Config :: addMountPoint ( '/ext' , '\OC\Files\storage\local' , array (), $mountType , $applicable , $isPersonal ));
unset ( $this -> allBackends [ '\OC\Files\Storage\SFTP' ]);
OCP\Config :: setAppValue (
'files_external' ,
'user_mounting_backends' ,
implode ( ',' , array_keys ( $this -> allBackends ))
);
// non-local but forbidden
$this -> assertFalse ( OC_Mount_Config :: addMountPoint ( '/ext' , '\OC\Files\Storage\SFTP' , array (), $mountType , $applicable , $isPersonal ));
$this -> assertFalse ( file_exists ( $this -> userHome . '/mount.json' ));
}
/**
* Test adding a mount point with an non - existant backend
*/
public function testAddMountPointUnexistClass () {
\OC_User :: setUserId ( 'test' );
$storageClass = 'Unexist_Storage' ;
$mountType = 'user' ;
$mountType = OC_Mount_Config :: MOUNT_TYPE_USER ;
$applicable = 'test' ;
$isPersonal = true ;
// local
// non-local
$this -> assertEquals ( false , OC_Mount_Config :: addMountPoint ( '/ext' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
$isPersonal = false ;
$this -> assertFalse ( OC_Mount_Config :: addMountPoint ( '/ext' , $storageClass , array (), $mountType , $applicable , $isPersonal ));
}
}