Test-kitchen has support for enduring reboots initiated by a Chef provisioner.

  name: chef_zero
  max_retries: 3 # tweak in conjunction with wait_for_retry
  wait_for_retry: 90 # tweak based on machine shutdown speed
  retry_on_exit_code: [35, 213] # retry for array of exit codes
    exit_status: :enabled # default in 13+, only required for 12.x
    client_fork: false # don't fork so we get true exit code, not needed for Windows

wait_for_retry is necessary so that Test-kitchen doesn’t try to reconnect before the system reboots (or at least before the transport stops taking connections). This is the most likely option to need tweaking and varies between drivers as well as the specifications of the instances.

retry_on_exit_code does not typically need to be set. The default value is [35, 213] - 35 from chef-client indicates a reboot has been scheduled during the run, while 213 indicates an exit due to a chef-client upgrade.