telnet localhost 25でConnection closed by foreign host.

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

/var/log/mail を見るとこんな感じのログが

Feb  8 09:43:20 www3075ue postfix/smtpd[12732]: connect from localhost[127.0.0.1]
Feb  8 09:43:20 www3075ue postfix/smtpd[12732]: warning: SASL: Connect to private/auth failed: No such file or directory
Feb  8 09:43:20 www3075ue postfix/smtpd[12732]: fatal: no SASL authentication mechanisms
Feb  8 09:43:21 www3075ue postfix/master[23716]: warning: process /usr/libexec/postfix/smtpd pid 12732 exit status 1
Feb  8 09:43:21 www3075ue postfix/master[23716]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

Traitと継承元で同一メソッドがあたっときどちらが優先されるかのメモ

PHP 7.2 の環境です

Traitと継承元で同一メソッドがあたっとき、Trait のメソッドのほうが優先されるようです

<?php
trait Runnable {
    function run() {
        echo __METHOD__ . "\n";
    }
}

class Human
{
    function run() {
        echo __METHOD__ . "\n";
    }
}

class Female extends Human
{
    use Runnable;
}

class Male extends Human
{
    use Runnable;

    function run() {
        return parent::run();
    }
}

$female = new Female();
$female->run(); //-> Runnable::run

$male = new Male();
$male->run(); //-> Human::run

LaravelのDuskテストでログインテストでセッションが生きててハマったお話

複数のテストを1ファイルに書いている場合、そのファイル中はセッションが生きているっぽい

なので、setUp とかで logout() してやらないといけないっぽい

以下の例では admin という guard からログアウトしています

なお、なぜか tearDown で動かなかった(未検証)

<?php

class LoginTest extends DuskTestCase
{
    use DatabaseMigrations;

    protected function setUp()
    {
        parent::setUp();

        try {
            $this->browse(function (Browser $browser) {
                $browser->logout('admin');
            });
        } catch (\Throwable $e) {
            echo $e->getMessage() . "\n";
        }
    }

    // ログインするテスト

    /**
     * 
     * @return void
     * @throws \Throwable
     */
    public function testRedirectAfterLogin()
    {
        $admin = factory(Admin::class)->create();

        $this->browse(function (Browser $browser) use ($admin) {

            $browser->visit('/admin/articles')
                ->assertPathIs('/admin/login')  // ここが動かなかった!
                ->type('email', $admin->email)
                ->type('password', 'secret')
                ->click('@login')
                ->assertPathIs('/admin/articles');
        });

    }
}