text: from __future__ import print_function
  import os
  import time
  from panda import Panda
  from helpers import connect_wifi, test_white, test_all_pandas, panda_type_to_serial, panda_connect_and_init
  import requests
  
  @test_all_pandas
  @panda_connect_and_init
  def test_get_serial(p):
    print(p.get_serial())
  
  @test_all_pandas
  @panda_connect_and_init
  def test_get_serial_in_flash_mode(p):
    p.reset(enter_bootstub=True)
    assert(p.bootstub)
    print(p.get_serial())
    p.reset()
  
  @test_white
  @panda_type_to_serial
  def test_connect_wifi(serials=None):
    connect_wifi(serials[0])
  
  @test_white
  @panda_type_to_serial
  def test_flash_wifi(serials=None):
    connect_wifi(serials[0])
    assert Panda.flash_ota_wifi(release=False), "OTA Wifi Flash Failed"
    connect_wifi(serials[0])
  
  @test_white
  @panda_type_to_serial
  def test_wifi_flash_st(serials=None):
    connect_wifi(serials[0])
    assert Panda.flash_ota_st(), "OTA ST Flash Failed"
    connected = False
    st = time.time()
    while not connected and (time.time() - st) < 20:
      try:
        p = Panda(serial=serials[0])
        p.get_serial()
        connected = True
      except:
        time.sleep(1)
  
    if not connected:
      assert False, "Panda failed to connect on USB after flashing"
  
  @test_white
  @panda_type_to_serial
  def test_webpage_fetch(serials=None):
    connect_wifi(serials[0])
    r = requests.get("http://192.168.0.10/")
    print(r.text)
  
    assert "This is your comma.ai panda" in r.text
  