lessless

lessless

Network Programming in Elixir and Erlang: Chat integration tests are failing at random

Title: Network Programming in Elixir and Erlang (p. 56)

Hi,
Thanks for the amazing book, first and foremost.

I found that Chat app integration tests, as they are provided on page 56, are randomly failing when I’m running them multiple times.

For example, all mix test runs were executed against the same codebase, with no modifications. Some runs succeeded, some failed and failed in different tests.

mix test
Compiling 1 file (.ex)
Generated chat app

16:48:32.613 [info] Started chat server on port 4101
Running ExUnit with seed: 621706, max_cases: 20

.........
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 0 failures
mix test

16:48:34.200 [info] Started chat server on port 4101
Running ExUnit with seed: 208381, max_cases: 20

.........
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 0 failures
mix test

16:48:35.467 [info] Started chat server on port 4101
Running ExUnit with seed: 474408, max_cases: 20

.........
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 0 failures
mix test

16:48:36.701 [info] Started chat server on port 4101
Running ExUnit with seed: 709368, max_cases: 20

......
16:48:36.961 [error] GenServer #PID<0.180.0> terminating
** (FunctionClauseError) no function clause matching in Chat.Connection.handle_info/2
    (chat 0.1.0) lib/chat/connection.ex:19: Chat.Connection.handle_info({:tcp_closed, #Port<0.11>}, %Chat.Connection{socket: #Port<0.11>, username: "amy", buffer: ""})
    (stdlib 6.2.2.2) gen_server.erl:2345: :gen_server.try_handle_info/3
    (stdlib 6.2.2.2) gen_server.erl:2433: :gen_server.handle_msg/6
    (stdlib 6.2.2.2) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
Last message: {:tcp_closed, #Port<0.11>}
State: %Chat.Connection{socket: #Port<0.11>, username: "amy", buffer: ""}

16:48:36.961 [error] GenServer #PID<0.181.0> terminating
** (FunctionClauseError) no function clause matching in Chat.Connection.handle_info/2
    (chat 0.1.0) lib/chat/connection.ex:19: Chat.Connection.handle_info({:tcp_closed, #Port<0.12>}, %Chat.Connection{socket: #Port<0.12>, username: "bern", buffer: ""})
    (stdlib 6.2.2.2) gen_server.erl:2345: :gen_server.try_handle_info/3
    (stdlib 6.2.2.2) gen_server.erl:2433: :gen_server.handle_msg/6
    (stdlib 6.2.2.2) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
Last message: {:tcp_closed, #Port<0.12>}
State: %Chat.Connection{socket: #Port<0.12>, username: "bern", buffer: ""}

16:48:36.961 [error] GenServer #PID<0.179.0> terminating
** (FunctionClauseError) no function clause matching in Chat.Connection.handle_info/2
    (chat 0.1.0) lib/chat/connection.ex:19: Chat.Connection.handle_info({:tcp_closed, #Port<0.8>}, %Chat.Connection{socket: #Port<0.8>, username: "jd", buffer: ""})
    (stdlib 6.2.2.2) gen_server.erl:2345: :gen_server.try_handle_info/3
    (stdlib 6.2.2.2) gen_server.erl:2433: :gen_server.handle_msg/6
    (stdlib 6.2.2.2) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
Last message: {:tcp_closed, #Port<0.8>}
State: %Chat.Connection{socket: #Port<0.8>, username: "jd", buffer: ""}


  1) test server closes connection ficlient sends register message twice (Chat.IntegrationTest)
     test/chat/integration_test.exs:9
     Assertion with =~ failed
     code:  assert log =~ "Invalid Register message"
     left:  ""
     right: "Invalid Register message"
     stacktrace:
       test/chat/integration_test.exs:21: (test)

..
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 1 failure
mix test

16:48:55.294 [info] Started chat server on port 4101
Running ExUnit with seed: 303579, max_cases: 20

......

  1) test server closes connection ficlient sends register message twice (Chat.IntegrationTest)
     test/chat/integration_test.exs:9
     Assertion with =~ failed
     code:  assert log =~ "Invalid Register message"
     left:  ""
     right: "Invalid Register message"
     stacktrace:
       test/chat/integration_test.exs:21: (test)

..
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 1 failure
mix test

16:48:57.808 [info] Started chat server on port 4101
Running ExUnit with seed: 817244, max_cases: 20

......

  1) test server closes connection ficlient sends register message twice (Chat.IntegrationTest)
     test/chat/integration_test.exs:9
     Assertion with =~ failed
     code:  assert log =~ "Invalid Register message"
     left:  ""
     right: "Invalid Register message"
     stacktrace:
       test/chat/integration_test.exs:21: (test)

..
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 1 failure
mix test

16:48:59.453 [info] Started chat server on port 4101
Running ExUnit with seed: 461426, max_cases: 20

......

  1) test server closes connection ficlient sends register message twice (Chat.IntegrationTest)
     test/chat/integration_test.exs:9
     Assertion with =~ failed
     code:  assert log =~ "Invalid Register message"
     left:  ""
     right: "Invalid Register message"
     stacktrace:
       test/chat/integration_test.exs:21: (test)

..
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 1 failure
mix test

16:49:00.937 [info] Started chat server on port 4101
Running ExUnit with seed: 944586, max_cases: 20

......
16:49:01.205 [error] GenServer #PID<0.180.0> terminating
** (FunctionClauseError) no function clause matching in Chat.Connection.handle_info/2
    (chat 0.1.0) lib/chat/connection.ex:19: Chat.Connection.handle_info({:tcp_closed, #Port<0.10>}, %Chat.Connection{socket: #Port<0.10>, username: "amy", buffer: ""})
    (stdlib 6.2.2.2) gen_server.erl:2345: :gen_server.try_handle_info/3
    (stdlib 6.2.2.2) gen_server.erl:2433: :gen_server.handle_msg/6
    (stdlib 6.2.2.2) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
Last message: {:tcp_closed, #Port<0.10>}
State: %Chat.Connection{socket: #Port<0.10>, username: "amy", buffer: ""}

16:49:01.205 [error] GenServer #PID<0.181.0> terminating
** (FunctionClauseError) no function clause matching in Chat.Connection.handle_info/2
    (chat 0.1.0) lib/chat/connection.ex:19: Chat.Connection.handle_info({:tcp_closed, #Port<0.12>}, %Chat.Connection{socket: #Port<0.12>, username: "bern", buffer: ""})
    (stdlib 6.2.2.2) gen_server.erl:2345: :gen_server.try_handle_info/3
    (stdlib 6.2.2.2) gen_server.erl:2433: :gen_server.handle_msg/6
    (stdlib 6.2.2.2) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
Last message: {:tcp_closed, #Port<0.12>}
State: %Chat.Connection{socket: #Port<0.12>, username: "bern", buffer: ""}

16:49:01.205 [error] GenServer #PID<0.179.0> terminating
** (FunctionClauseError) no function clause matching in Chat.Connection.handle_info/2
    (chat 0.1.0) lib/chat/connection.ex:19: Chat.Connection.handle_info({:tcp_closed, #Port<0.8>}, %Chat.Connection{socket: #Port<0.8>, username: "jd", buffer: ""})
    (stdlib 6.2.2.2) gen_server.erl:2345: :gen_server.try_handle_info/3
    (stdlib 6.2.2.2) gen_server.erl:2433: :gen_server.handle_msg/6
    (stdlib 6.2.2.2) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
Last message: {:tcp_closed, #Port<0.8>}
State: %Chat.Connection{socket: #Port<0.8>, username: "jd", buffer: ""}


  1) test server closes connection ficlient sends register message twice (Chat.IntegrationTest)
     test/chat/integration_test.exs:9
     Assertion with =~ failed
     code:  assert log =~ "Invalid Register message"
     left:  ""
     right: "Invalid Register message"
     stacktrace:
       test/chat/integration_test.exs:21: (test)

..
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 1 failure
mix test

16:49:02.370 [info] Started chat server on port 4101
Running ExUnit with seed: 378187, max_cases: 20

......

  1) test server closes connection ficlient sends register message twice (Chat.IntegrationTest)
     test/chat/integration_test.exs:9
     Assertion with =~ failed
     code:  assert log =~ "Invalid Register message"
     left:  ""
     right: "Invalid Register message"
     stacktrace:
       test/chat/integration_test.exs:21: (test)

..
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 1 failure
mix test

16:49:04.997 [info] Started chat server on port 4101
Running ExUnit with seed: 5948, max_cases: 20

......

  1) test server closes connection ficlient sends register message twice (Chat.IntegrationTest)
     test/chat/integration_test.exs:9
     Assertion with =~ failed
     code:  assert log =~ "Invalid Register message"
     left:  ""
     right: "Invalid Register message"
     stacktrace:
       test/chat/integration_test.exs:21: (test)

..
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 1 failure
mix test

16:49:08.565 [info] Started chat server on port 4101
Running ExUnit with seed: 573340, max_cases: 20

......

  1) test server closes connection ficlient sends register message twice (Chat.IntegrationTest)
     test/chat/integration_test.exs:9
     Assertion with =~ failed
     code:  assert log =~ "Invalid Register message"
     left:  ""
     right: "Invalid Register message"
     stacktrace:
       test/chat/integration_test.exs:21: (test)

..
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 1 failure
mix test

16:49:16.089 [info] Started chat server on port 4101
Running ExUnit with seed: 98240, max_cases: 20

.........
Finished in 0.2 seconds (0.2s async, 0.00s sync)
1 doctest, 8 tests, 0 failures

The repo to reproduce the issue is available at GitHub - lessless/chat: Errata for

Where Next?

Popular Pragmatic Bookshelf topics Top

johnp
Running the examples in chapter 5 c under pytest 5.4.1 causes an AttributeError: ‘module’ object has no attribute ‘config’. In particula...
New
jesse050717
Title: Web Development with Clojure, Third Edition, pg 116 Hi - I just started chapter 5 and I am stuck on page 116 while trying to star...
New
AleksandrKudashkin
On the page xv there is an instruction to run bin/setup from the main folder. I downloaded the source code today (12/03/21) and can’t see...
New
alanq
This isn’t directly about the book contents so maybe not the right forum…but in some of the code apps (e.g. turbo/06) it sends a TURBO_ST...
New
jskubick
I think I might have found a problem involving SwitchCompat, thumbTint, and trackTint. As entered, the SwitchCompat changes color to hol...
New
New
taguniversalmachine
Hi, I am getting an error I cannot figure out on my test. I have what I think is the exact code from the book, other than I changed “us...
New
rainforest
Hi, I’ve got a question about the implementation of PubSub when using a Phoenix.Socket.Transport behaviour rather than channels. Before ...
New
bjnord
Hello @herbert ! Trying to get the very first “Hello, Bracket Terminal!" example to run (p. 53). I develop on an Amazon EC2 instance runn...
New
dachristenson
I just bought this book to learn about Android development, and I’m already running into a major issue in Ch. 1, p. 20: “Update activity...
New

Other popular topics Top

AstonJ
If it’s a mechanical keyboard, which switches do you have? Would you recommend it? Why? What will your next keyboard be? Pics always w...
New
Exadra37
Please tell us what is your preferred monitor setup for programming(not gaming) and why you have chosen it. Does your monitor have eye p...
New
brentjanderson
Bought the Moonlander mechanical keyboard. Cherry Brown MX switches. Arms and wrists have been hurting enough that it’s time I did someth...
New
PragmaticBookshelf
Build highly interactive applications without ever leaving Elixir, the way the experts do. Let LiveView take care of performance, scalabi...
New
DevotionGeo
I have always used antique keyboards like Cherry MX 1800 or Cherry MX 8100 and almost always have modified the switches in some way, like...
New
New
CommunityNews
A Brief Review of the Minisforum V3 AMD Tablet. Update: I have created an awesome-minisforum-v3 GitHub repository to list information fo...
New
AstonJ
If you’re getting errors like this: psql: error: connection to server on socket “/tmp/.s.PGSQL.5432” failed: No such file or directory ...
New
AnfaengerAlex
Hello, I’m a beginner in Android development and I’m facing an issue with my project setup. In my build.gradle.kts file, I have the foll...
New
AstonJ
Curious what kind of results others are getting, I think actually prefer the 7B model to the 32B model, not only is it faster but the qua...
New

Sub Categories: