diff --git a/.env.testing b/.env.testing index e132564b..24ad79fd 100644 --- a/.env.testing +++ b/.env.testing @@ -1,50 +1,17 @@ APP_NAME=Laravel -APP_ENV=dev -APP_KEY=base64:KvIecx8zoy6RjcbJM8s98ZKs9IDGUHFVqBRn3Awfmso= +APP_ENV=local +APP_KEY= APP_DEBUG=true APP_URL=http://localhost -LOG_CHANNEL=stack +LOG_CHANNEL=stderr -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=homestead -DB_USERNAME=homestead -DB_PASSWORD=secret - -BROADCAST_DRIVER=log -CACHE_DRIVER=file +CACHE_DRIVER=array QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 -REDIS_HOST=127.0.0.1 -REDIS_PASSWORD=null -REDIS_PORT=6379 - -MAIL_DRIVER=smtp -MAIL_HOST=smtp.mailtrap.io -MAIL_PORT=2525 -MAIL_USERNAME=null -MAIL_PASSWORD=null -MAIL_ENCRYPTION=null - -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -AWS_DEFAULT_REGION=us-east-1 -AWS_BUCKET= - -PUSHER_APP_ID= -PUSHER_APP_KEY= -PUSHER_APP_SECRET= -PUSHER_APP_CLUSTER=mt1 - -MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" -MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" - -LDAP_HOST=test_ldap -LDAP_PORT=389 +LDAP_HOST=openldap LDAP_BASE_DN="dc=Test" LDAP_USERNAME="cn=admin,dc=Test" LDAP_PASSWORD="test" diff --git a/tests/Feature/GetBaseDNTest.php b/tests/Feature/GetBaseDNTest.php index e5cd6d8e..c4048f10 100644 --- a/tests/Feature/GetBaseDNTest.php +++ b/tests/Feature/GetBaseDNTest.php @@ -20,6 +20,6 @@ class GetBaseDNTest extends TestCase $this->assertIsObject($o); $this->assertCount(6,$o->toArray()); - $this->assertEquals('dc=Test',$o->first()->getDn()); + $this->assertEquals('c=AU',$o->first()->getDn()); } -} +} \ No newline at end of file diff --git a/tests/Feature/ImportTest.php b/tests/Feature/ImportTest.php new file mode 100644 index 00000000..79caf36d --- /dev/null +++ b/tests/Feature/ImportTest.php @@ -0,0 +1,48 @@ +assertTrue($this->login()); + $this->assertTrue(Auth::check()); + $this->actingAs(Auth::user()); + $this->assertFalse(config('ldap.cache.enabled')); + + // Check that it exists + $this->assertEquals($dn,$x=config('server')->fetch($dn)); + $this->assertTrue($x->exists); + + // Delete the entry + $x->delete(); + $this->assertEquals(NULL,config('server')->fetch($dn)); + + $file = new UploadedFile($import_file,'ldif-import.ldif',null,null,true); + + $response = $this + ->actingAs(Auth::user()) + ->from('/import') + ->post('/import/process/ldif',[ + '_token' => csrf_token(), + 'key'=>Crypt::encryptString('*import|_NOP'), + 'file' => $file, + ]); + + //$response->dump(); + $response->assertSuccessful(); + + // Check that it hsa been created + $this->assertEquals($dn,$x=config('server')->fetch($dn)); + $this->assertTrue($x->exists); + } +} \ No newline at end of file diff --git a/tests/Feature/LoginTest.php b/tests/Feature/LoginTest.php index 3f2507b0..fd2d01c6 100644 --- a/tests/Feature/LoginTest.php +++ b/tests/Feature/LoginTest.php @@ -2,8 +2,8 @@ namespace Tests\Feature; -use LdapRecord\Container; -use LdapRecord\Testing\DirectoryFake; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Session; use Tests\TestCase; class LoginTest extends TestCase @@ -18,12 +18,10 @@ class LoginTest extends TestCase public function test_admin_dn_login() { - $username = 'cn=Admin,dc=Test'; - $password = 'test'; + $this->assertTrue($this->login()); + $this->assertTrue(Auth::check()); - //DirectoryFake::setup(); - - $connection = Container::getDefaultConnection(); - $this->assertTrue($connection->auth()->attempt($username,$password)); + $this->assertTrue(Session::has('username_encrypt')); + $this->assertTrue(Session::has('password_encrypt')); } -} +} \ No newline at end of file diff --git a/tests/Feature/data/ldif-import.ldif b/tests/Feature/data/ldif-import.ldif new file mode 100644 index 00000000..5f8f4497 --- /dev/null +++ b/tests/Feature/data/ldif-import.ldif @@ -0,0 +1,83 @@ +# LDIF Export for cn=Bart Simpson,ou=People,o=Simpsons +# Server: LDAP Server (ldap://ldap:389) +# Total Entries: 1 +# +# Generated by PLA (http://localhost) on January 12, 2024 12:39 pm +# Exported by Anonymous +# Version: v2.0.0-dev-00000000 + +version: 1 +# Entry 1: cn=Bart Simpson,ou=People,o=Simpsons +dn: cn=Bart Simpson,ou=People,o=Simpsons +audio: test +cn: Bart Simpson +gidNumber: 1000 +givenName: Bart +homeDirectory: /home/users/simpsons/bart +jpegPhoto:: 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 +l: Springfield +mail: bart.simpson@example.com +o: The Simpsons +objectClass: inetOrgPerson +objectClass: posixAccount +objectClass: top +objectClass: shadowAccount +sn: Simpson +st: 742 Evergreen Terrace +telephoneNumber: +1 939 555 3126 +uid: bart +uidNumber: 1000 +userPassword: eatmyshorts diff --git a/tests/TestCase.php b/tests/TestCase.php index 9d6706a5..677a5611 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -3,10 +3,20 @@ namespace Tests; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Config; + +use App\Classes\LDAP\Server; abstract class TestCase extends BaseTestCase { - use CreatesApplication; + use CreatesApplication; + + protected function setUp(): void + { + parent::setUp(); + Config::set('server',new Server()); + } /** * Hack to get testing working @@ -19,4 +29,15 @@ abstract class TestCase extends BaseTestCase app()->instance('config', $config); app()->instance('events', $events); } + + protected function login(): bool + { + //$username = 'cn=AdminUser,dc=Test'; + $username = 'admin'; + $password = 'password'; + + $this->post('/login',['uid'=>$username,'password'=>$password]); + + return Auth::check() && (Auth::user()->getDN() === 'cn=AdminUser,dc=Test'); + } }