     router.send(frame);
     zmtp_frame_destroy(&frame);
   }
+}
 
+void setup() {
+  enableWiFi();
+
+  // uint8_t address[4] = { 192, 168, 29, 198 };
+  uint8_t address[4] = {172, 20, 10, 3};
+  runDealerTest(address);
+  runRouterTest();
+
+  // Allow time for network to catch up before we hard disconnect.
   delay(1000);
 
   end();

    dealer.send(frame);
    zmtp_frame_destroy(&frame);
  }

  ZMTPSocket router(ROUTER);

  router.bind(1235);

  tries = 0;
  while (!router.ready()) {
    Serial.println("Not ready yet.");
    if (++tries > 5) {
      end();
    }
    delay(1000);
    router.update();
  }

  tries = 0;
  zmtp_frame_t *question = NULL;
  while (!(question = router.recv())) {
    Serial.println("No messages yet.");
    if (++tries > 5) {
      end();
    }
    delay(1000);
  }

  // TODO(schoon) - Receive identity frame first.
  // HACK(schoon) - The zmtp_frame API doesn't tell us about framing, so

  uint8_t identity[6] = {'P', 'h', 'o', 't', 'o', 'n'};
  dealer.setIdentity(identity, 6);

  waitUntilReady(dealer);

  {
    uint8_t data[5] = {'H', 'e', 'l', 'l', 'o'};
