CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.32k stars 4.14k forks source link

vehicle_level_test - null dmon_p pointer (and running into the player) #46441

Open actual-nh opened 3 years ago

actual-nh commented 3 years ago

During (randomized order) testing, vehicle_level_test and vehicle_ramp_test_60 appear to have failed due to running into the player. Please see #46439 for further information; this is a separate issue to keep track of it independently.

Ping: @kevingranade, @jbytheway

actual-nh commented 3 years ago

Also see Travis and general build failures for #46473 (1513390, for instance).

actual-nh commented 3 years ago

To get the crash without so many of the tests being run:

tests/cata_test -f tmp_tests.txt --success --rng-seed time --order rand

tmp_tests.txt test_user_dir.zip

Partial output (there's also a weary test failure):


-------------------------------------------------------------------------------
vehicle_level_test
  beetle edge drop
-------------------------------------------------------------------------------
../tests/vehicle_ramp_test.cpp:298
...............................................................................

../tests/vehicle_ramp_test.cpp:33: PASSED:
  REQUIRE_FALSE( player_character.in_vehicle )
with expansion:
  !false

../tests/vehicle_ramp_test.cpp:239: PASSED:
  REQUIRE( veh_ptr != nullptr )
with expansion:
  0x00007fa92484fe00 != nullptr

../tests/vehicle_ramp_test.cpp:246: PASSED:
  REQUIRE( !veh.is_in_water() )
with expansion:
  true

../tests/vehicle_ramp_test.cpp:254: PASSED:
  CHECK( veh.safe_velocity() > 0 )
with expansion:
  8884 (0x22b4) > 0

../tests/vehicle_ramp_test.cpp:273: PASSED:
  REQUIRE( z_span.size() > 1 )
with expansion:
  2 > 1

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: FAILED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  1 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

../tests/vehicle_ramp_test.cpp:287: PASSED:
  CHECK( veh.global_part_pos3( *prt ).z == 0 )
with expansion:
  0 == 0

Stack trace at fatal error:

    Attempting to repeat stack trace using debug symbols…
../tests/vehicle_ramp_test.cpp:287: FAILED:
  {Unknown expression after the reported line}
due to a fatal error condition:
  SIGSEGV - Segmentation violation signal

Log messages during failed test:
12:00:00AM: You are slammed against the Beetle.
12:00:00AM: You're knocked to the floor!
12:00:00AM: You are slammed against the Beetle.
12:00:00AM: Your <color_c_light_green>|| </color>duffel bag > atomic lamp is ripped!
12:00:00AM: You land on the Beetle.
12:00:00AM: Your Beetle's <color_c_light_green>||</color> frame rams into you!
12:00:00AM: You land on the Beetle.
12:00:00AM: Your Beetle's <color_c_light_green>||</color> frame rams into you!
12:00:00AM: You land on the Beetle.
12:00:00AM: Your Beetle's <color_c_light_green>||</color> frame rams into you!
12:00:00AM: You are slammed against the Beetle.
12:00:00AM: You are slammed against the Beetle.
12:00:00AM: Your Beetle's <color_c_light_green>||</color> frame rams into you!
===============================================================================
test cases:   3 |   1 passed |  2 failed
assertions: 153 | 135 passed | 18 failed

Segmentation fault: 11```
actual-nh commented 3 years ago

@anothersimulacrum has figured out a way to get it to have a failure instead of a segmentation violation - see #46476.

anothersimulacrum commented 3 years ago

The player used to be moved, but it was removed in 8cfbe57f8808aa9461288087b4cef3fa5e850e59

anothersimulacrum commented 3 years ago

Here's where we are in declaration order:

motorcycle no ramp - ramp_transition_angled: 0 0 0
motorcycle ramp up - ramp_transition_angled: 63 60 0
motorcycle ramp down - ramp_transition_angled: 63 60 0
motorcycle angle no ramp - ramp_transition_angled: 63 60 0
motorcycle angled ramp down - ramp_transition_angled: 63 60 0
motorcycle angled ramp up - ramp_transition_angled: 63 60 0
motorcycle no ramp - ramp_transition_angled: 63 60 0
motorcycle ramp up - ramp_transition_angled: 64 60 0
motorcycle ramp down - ramp_transition_angled: 64 60 0
motorcycle angle no ramp - ramp_transition_angled: 64 60 0
motorcycle angled ramp down - ramp_transition_angled: 64 60 0
motorcycle angled ramp up - ramp_transition_angled: 64 60 0
motorcycle no ramp - ramp_transition_angled: 64 60 0
motorcycle ramp up - ramp_transition_angled: 65 60 0
motorcycle ramp down - ramp_transition_angled: 65 60 0
motorcycle angle no ramp - ramp_transition_angled: 65 60 0
motorcycle angled ramp down - ramp_transition_angled: 65 60 0
motorcycle angled ramp up - ramp_transition_angled: 65 60 0
beetle body drop - level_out: 65 60 0
beetle edge drop - level_out: 65 60 0

Here we're at with this issue:

beetle body drop - level_out: 60 60 0
beetle edge drop - level_out: 60 60 0
motorcycle no ramp - ramp_transition_angled: 60 60 0
motorcycle ramp up - ramp_transition_angled: 64 60 0
motorcycle ramp down - ramp_transition_angled: 64 60 0
motorcycle angle no ramp - ramp_transition_angled: 64 60 0
motorcycle angled ramp down - ramp_transition_angled: 64 60 0
motorcycle angled ramp up - ramp_transition_angled: 64 60 0
motorcycle no ramp - ramp_transition_angled: 64 60 0
motorcycle ramp up - ramp_transition_angled: 65 60 0
motorcycle ramp down - ramp_transition_angled: 65 60 0
motorcycle angle no ramp - ramp_transition_angled: 65 60 0
motorcycle angled ramp down - ramp_transition_angled: 65 60 0
motorcycle angled ramp up - ramp_transition_angled: 65 60 0
motorcycle no ramp - ramp_transition_angled: 65 60 0
motorcycle ramp up - ramp_transition_angled: 63 60 0
motorcycle ramp down - ramp_transition_angled: 63 60 0
motorcycle angle no ramp - ramp_transition_angled: 63 60 0
motorcycle angled ramp down - ramp_transition_angled: 63 60 0
motorcycle angled ramp up - ramp_transition_angled: 63 60 0
anothersimulacrum commented 3 years ago

Oh, and I don't think I said it, dmon_p is nullptr because it's trying to place a monster where the character is.

actual-nh commented 3 years ago

Looks like the failure only happens when the player isn't fed properly; see #46473 for in-testing patch for this.