expectException(LAMException::class, 'this is no LDIF'); $importer = new Importer(); $importer->getTasks($lines); } /** * Wrong format version. */ public function testWrongVersion() { $lines = array( "version: 3" ); $this->expectException(LAMException::class, 'version: 3'); $importer = new Importer(); $importer->getTasks($lines); } /** * Multiple versions. */ public function testMultipleVersions() { $lines = array( "version: 1", "", "version: 1" ); $this->expectException(LAMException::class); $importer = new Importer(); $importer->getTasks($lines); } /** * Data after version. */ public function testDataAfterVersion() { $lines = array( "version: 1", "some: data" ); $this->expectException(LAMException::class); $importer = new Importer(); $importer->getTasks($lines); } /** * DN line without any data. */ public function testDnNoData() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com" ); $this->expectException(LAMException::class, 'dn: uid=test,dc=example,dc=com'); $importer = new Importer(); $importer->getTasks($lines); } /** * One complete entry. */ public function testSingleFullEntry() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "objectClass: inetOrgPerson", "uid: test", ); $importer = new Importer(); $tasks = $importer->getTasks($lines); $this->assertEquals(1, sizeof($tasks)); } /** * Change entry with invalid changetype. */ public function testChangeInvalidType() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: invalid", "uid: test", ); $this->expectException(LAMException::class, 'uid=test,dc=example,dc=com - changeType: invalid'); $importer = new Importer(); $tasks = $importer->getTasks($lines); } /** * Change entry with add changetype. */ public function testChangeAdd() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: add", "uid: test", ); $importer = new Importer(); $tasks = $importer->getTasks($lines); $this->assertEquals(1, sizeof($tasks)); $task = $tasks[0]; $this->assertEquals(AddEntryTask::class, get_class($task)); } /** * Change entry with modrdn changetype and invalid options. */ public function testChangeModRdnInvalidData() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modrdn", "uid: test", ); $this->expectException(LAMException::class, 'uid=test,dc=example,dc=com'); $importer = new Importer(); $tasks = $importer->getTasks($lines); } /** * Change entry with modrdn changetype and invalid deleteoldrdn. */ public function testChangeModRdnInvalidDeleteoldrdn() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modrdn", "newrdn: uid1=test", "deleteoldrdn: x", ); $this->expectException(LAMException::class, 'uid=test,dc=example,dc=com'); $importer = new Importer(); $tasks = $importer->getTasks($lines); } /** * Change entry with modrdn changetype. */ public function testChangeModRdn() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modrdn", "newrdn: uid1=test", "deleteoldrdn: 0", ); $importer = new Importer(); $tasks = $importer->getTasks($lines); $this->assertEquals(1, sizeof($tasks)); $task = $tasks[0]; $this->assertEquals(RenameEntryTask::class, get_class($task)); } /** * Change entry with delete changetype with extra line. */ public function testChangeDeleteInvalid() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: delete", "uid: test", ); $this->expectException(LAMException::class, 'uid=test,dc=example,dc=com'); $importer = new Importer(); $tasks = $importer->getTasks($lines); } /** * Change entry with delete changetype. */ public function testChangeDelete() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: delete", ); $importer = new Importer(); $tasks = $importer->getTasks($lines); $this->assertEquals(1, sizeof($tasks)); $task = $tasks[0]; $this->assertEquals(DeleteEntryTask::class, get_class($task)); } /** * Change entry with modify changetype with invalid operation. */ public function testChangeModifyInvalid() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modify", "invalid: test", ); $this->expectException(LAMException::class, 'uid=test,dc=example,dc=com'); $importer = new Importer(); $tasks = $importer->getTasks($lines); } /** * Change entry with modify changetype and add operation. */ public function testChangeModifyAddInvalid() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modify", "add: uid", "uid: uid1", "invalid: uid2" ); $this->expectException(LAMException::class, 'uid=test,dc=example,dc=com'); $importer = new Importer(); $tasks = $importer->getTasks($lines); } /** * Change entry with modify changetype and add operation. */ public function testChangeModifyAdd() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modify", "add: uid", "uid: uid1", "uid: uid2" ); $importer = new Importer(); $tasks = $importer->getTasks($lines); $this->assertEquals(1, sizeof($tasks)); $task = $tasks[0]; $this->assertEquals(MultiTask::class, get_class($task)); $subtasks = $task->getTasks(); $this->assertEquals(1, sizeof($subtasks)); $subTask = $subtasks[0]; $this->assertEquals(AddAttributesTask::class, get_class($subTask)); $this->assertEquals($subTask->getDn(), 'uid=test,dc=example,dc=com'); $attributes = $subTask->getAttributes(); $this->assertEquals(1, sizeof($attributes)); $this->assertEquals(2, sizeof($attributes['uid'])); $this->assertTrue(in_array('uid1', $attributes['uid'])); $this->assertTrue(in_array('uid2', $attributes['uid'])); } /** * Change entry with modify changetype and two add operations. */ public function testChangeModifyAddTwice() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modify", "add: uid", "uid: uid1", "uid: uid2", "-", "add: gn", "gn: name1", "gn: name2" ); $importer = new Importer(); $tasks = $importer->getTasks($lines); $this->assertEquals(1, sizeof($tasks)); $task = $tasks[0]; $this->assertEquals(MultiTask::class, get_class($task)); $subtasks = $task->getTasks(); $this->assertEquals(2, sizeof($subtasks)); $subTask = $subtasks[0]; $this->assertEquals(AddAttributesTask::class, get_class($subTask)); $this->assertEquals($subTask->getDn(), 'uid=test,dc=example,dc=com'); $attributes = $subTask->getAttributes(); $this->assertEquals(1, sizeof($attributes)); $this->assertEquals(2, sizeof($attributes['uid'])); $this->assertTrue(in_array('uid1', $attributes['uid'])); $this->assertTrue(in_array('uid2', $attributes['uid'])); $subTask = $subtasks[1]; $this->assertEquals(AddAttributesTask::class, get_class($subTask)); $this->assertEquals($subTask->getDn(), 'uid=test,dc=example,dc=com'); $attributes = $subTask->getAttributes(); $this->assertEquals(1, sizeof($attributes)); $this->assertEquals(2, sizeof($attributes['gn'])); $this->assertTrue(in_array('name1', $attributes['gn'])); $this->assertTrue(in_array('name2', $attributes['gn'])); } /** * Change entry with modify changetype and delete operation. */ public function testChangeModifyDelete() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modify", "delete: uid", "uid: uid1", "uid: uid2" ); $importer = new Importer(); $tasks = $importer->getTasks($lines); $this->assertEquals(1, sizeof($tasks)); $task = $tasks[0]; $this->assertEquals(MultiTask::class, get_class($task)); $subtasks = $task->getTasks(); $this->assertEquals(1, sizeof($subtasks)); $subTask = $subtasks[0]; $this->assertEquals(DeleteAttributesTask::class, get_class($subTask)); $this->assertEquals($subTask->getDn(), 'uid=test,dc=example,dc=com'); $attributes = $subTask->getAttributes(); $this->assertEquals(1, sizeof($attributes)); $this->assertEquals(2, sizeof($attributes['uid'])); $this->assertTrue(in_array('uid1', $attributes['uid'])); $this->assertTrue(in_array('uid2', $attributes['uid'])); } /** * Change entry with modify changetype and delete operation. */ public function testChangeModifyDeleteAll() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modify", "delete: uid", ); $importer = new Importer(); $tasks = $importer->getTasks($lines); $this->assertEquals(1, sizeof($tasks)); $task = $tasks[0]; $this->assertEquals(MultiTask::class, get_class($task)); $subtasks = $task->getTasks(); $this->assertEquals(1, sizeof($subtasks)); $subTask = $subtasks[0]; $this->assertEquals(DeleteAttributesTask::class, get_class($subTask)); $this->assertEquals($subTask->getDn(), 'uid=test,dc=example,dc=com'); $attributes = $subTask->getAttributes(); $this->assertTrue(empty($attributes)); } /** * Change entry with modify changetype and replace operation. */ public function testChangeModifyReplace() { $lines = array( "version: 1", "", "dn: uid=test,dc=example,dc=com", "changeType: modify", "replace: uid", "uid: uid1", "uid: uid2", ); $importer = new Importer(); $tasks = $importer->getTasks($lines); $this->assertEquals(1, sizeof($tasks)); $task = $tasks[0]; $this->assertEquals(MultiTask::class, get_class($task)); $subtasks = $task->getTasks(); $this->assertEquals(1, sizeof($subtasks)); $subTask = $subtasks[0]; $this->assertEquals(ReplaceAttributesTask::class, get_class($subTask)); $this->assertEquals($subTask->getDn(), 'uid=test,dc=example,dc=com'); $attributes = $subTask->getAttributes(); $this->assertEquals(1, sizeof($attributes)); $this->assertEquals(2, sizeof($attributes['uid'])); $this->assertTrue(in_array('uid1', $attributes['uid'])); $this->assertTrue(in_array('uid2', $attributes['uid'])); } }