ClickHouse/tests/queries/0_stateless/01293_client_interactive_vertical_multiline.expect
Azat Khuzhin a424b4ad56 Do not ignore eof in expect tests
expect_after that adjusts default timeout handler, reseted eof handler,
and this tell expect that it can ignore eof from read, consider the
following example:

<details>

    ```expect
    #!/usr/bin/expect -f

    exp_internal 1
    log_user 1
    set timeout 4
    match_max 100000

    expect_after {
        # eof { exp_continue }
        timeout {
            exit 1
        }
    }

    spawn bash -c "sleep 1; echo ':) '"
    expect ":) "
    ```

    ```
    $ ./expect.expect < /dev/null
    spawn bash -c sleep 1; echo ':) '
    parent: waiting for sync byte
    parent: telling child to go ahead
    parent: now unsynchronized from child
    spawn: returns {6614}

    expect: does "" (spawn_id exp4) match glob pattern ":) "? no
    expect: read eof
                 ^^^
    expect: set expect_out(spawn_id) "exp0"
    expect: set expect_out(buffer) ""
    ```

And with uncommented eof handler:

    ```
    $ ./expect.expect < /dev/null
    spawn bash -c sleep 1; echo ':) '
    parent: waiting for sync byte
    parent: telling child to go ahead
    parent: now unsynchronized from child
    spawn: returns {17959}

    expect: does "" (spawn_id exp4) match glob pattern ":) "? no
    expect: read eof
    expect: set expect_out(spawn_id) "exp0"
    expect: set expect_out(buffer) ""
    expect: continuing expect after update

    expect: does "" (spawn_id exp4) match glob pattern ":) "? no

    expect: does ":) \r\n" (spawn_id exp4) match glob pattern ":) "? yes
    expect: set expect_out(0,string) ":) "
    expect: set expect_out(spawn_id) "exp4"
    expect: set expect_out(buffer) ":) "
    ```

</details>
2021-12-29 10:02:38 +03:00

94 lines
1.5 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/expect -f
log_user 0
set timeout 60
match_max 100000
expect_after {
# Do not ignore eof from expect
eof { exp_continue }
# A default timeout action is to do nothing, change it to fail
timeout { exit 1 }
}
set basedir [file dirname $argv0]
spawn bash -c "source $basedir/../shell_config.sh ; \$CLICKHOUSE_CLIENT_BINARY \$CLICKHOUSE_CLIENT_OPT --disable_suggestion"
expect ":) "
send -- "SELECT 1\r"
expect "│ 1 │"
expect ":) "
send -- "SELECT 1\\G\r"
expect "Row 1:"
expect "1: 1"
expect ":) "
send -- "SELECT 1\\\r"
expect ":-] "
send -- ", 2\r"
expect "│ 1 │ 2 │"
expect ":) "
send -- "SELECT 1\\\r"
expect ":-] "
send -- ", 2\\G\r"
expect "Row 1:"
expect "1: 1"
expect "2: 2"
expect ":) "
send -- ""
expect eof
spawn bash -c "source $basedir/../shell_config.sh ; \$CLICKHOUSE_CLIENT_BINARY \$CLICKHOUSE_CLIENT_OPT --disable_suggestion --multiline"
expect ":) "
send -- "SELECT 1;\r"
expect "│ 1 │"
expect ":) "
send -- "SELECT 1\\G\r"
expect "Row 1:"
expect "1: 1"
expect ":) "
send -- "SELECT 1; \r"
expect "│ 1 │"
expect ":) "
send -- "SELECT 1\\G \r"
expect "Row 1:"
expect "1: 1"
expect ":) "
send -- "SELECT 1\r"
expect ":-] "
send -- ";\r"
expect "│ 1 │"
expect ":) "
send -- "SELECT 1\r"
expect ":-] "
send -- "\\G\r"
expect "Row 1:"
expect "1: 1"
expect ":) "
send -- "SELECT 1\r"
expect ":-] "
send -- ", 2;\r"
expect "│ 1 │ 2 │"
expect ":) "
send -- "SELECT 1\r"
expect ":-] "
send -- ", 2\\G\r"
expect "Row 1:"
expect "1: 1"
expect "2: 2"
expect ":) "
send -- ""
expect eof