diff --git a/buffet/etc/init/buffet.conf b/buffet/etc/init/buffet.conf
index bd273c1..6948605 100644
--- a/buffet/etc/init/buffet.conf
+++ b/buffet/etc/init/buffet.conf
@@ -13,11 +13,12 @@
 env BUFFET_ENABLE_XMPP=
 env BUFFET_STATE_PATH=
 env BUFFET_CONFIG_PATH=
-env BUFFET_TEST_DEFINITIONS_PATH=
 env BUFFET_ENABLE_PING=false
-env BUFFET_DISABLE_SECURITY=false
 env BUFFET_DEVICE_WHITELIST=
 env BUFFET_DISABLE_PRIVET=false
+env BUFFET_TEST_DEFINITIONS_PATH=
+env BUFFET_DISABLE_SECURITY=false
+env BUFFET_TEST_PRIVET_SSID=
 
 pre-start script
   mkdir -m 0755 -p /var/lib/buffet
@@ -31,12 +32,13 @@
     --v="${BUFFET_LOG_LEVEL}" \
     --config_path="${BUFFET_CONFIG_PATH}" \
     --state_path="${BUFFET_STATE_PATH}" \
-    --test_definitions_path="${BUFFET_TEST_DEFINITIONS_PATH}" \
-    --enable_xmpp="${BUFFET_ENABLE_XMPP}" \
     --disable_security="${BUFFET_DISABLE_SECURITY}" \
     --enable_ping="${BUFFET_ENABLE_PING}" \
     --device_whitelist="${BUFFET_DEVICE_WHITELIST}" \
-    --disable_privet="${BUFFET_DISABLE_PRIVET}"
+    --disable_privet="${BUFFET_DISABLE_PRIVET}" \
+    --test_definitions_path="${BUFFET_TEST_DEFINITIONS_PATH}" \
+    --enable_xmpp="${BUFFET_ENABLE_XMPP}" \
+    --test_privet_ssid="${BUFFET_TEST_PRIVET_SSID}"
 
 # Wait for daemon to claim its D-Bus name before transitioning to started.
 post-start exec gdbus wait --system --timeout 30 org.chromium.Buffet
diff --git a/buffet/main.cc b/buffet/main.cc
index 510dd04..0d1dff9 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -56,17 +56,22 @@
                 "Path to file containing config information.");
   DEFINE_string(state_path, kDefaultStateFilePath,
                 "Path to file containing state information.");
-  DEFINE_string(test_definitions_path, "",
-                "Path to directory containing additional command "
-                "and state definitions.  For use in test only.");
   DEFINE_bool(enable_xmpp, true,
               "Connect to GCD via a persistent XMPP connection.");
   DEFINE_bool(disable_privet, false, "disable Privet protocol");
-  DEFINE_bool(disable_security, false, "disable Privet security for tests");
   DEFINE_bool(enable_ping, false, "enable test HTTP handler at /privet/ping");
   DEFINE_string(device_whitelist, "",
                 "Comma separated list of network interfaces to monitor for "
                 "connectivity (an empty list enables all interfaces).");
+
+  DEFINE_bool(disable_security, false,
+              "disable Privet security for tests. For test only.");
+  DEFINE_string(test_privet_ssid, "",
+                "Fixed SSID for WiFi bootstrapping. For test only.");
+  DEFINE_string(test_definitions_path, "",
+                "Path to directory containing additional command "
+                "and state definitions. For test only.");
+
   chromeos::FlagHelper::Init(argc, argv, "Privet protocol handler daemon");
   if (FLAGS_config_path.empty())
     FLAGS_config_path = kDefaultConfigFilePath;
@@ -91,6 +96,7 @@
   options.disable_privet = FLAGS_disable_privet;
   options.disable_security = FLAGS_disable_security;
   options.enable_ping = FLAGS_enable_ping;
+  options.test_privet_ssid = FLAGS_test_privet_ssid;
 
   buffet::Daemon daemon{options};
   return daemon.Run();
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index 5a49409..4adaa53 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -46,11 +46,12 @@
     base::FilePath state_path;
     base::FilePath definitions_path;
     base::FilePath test_definitions_path;
-    bool xmpp_enabled{true};
+    bool xmpp_enabled = true;
     std::set<std::string> device_whitelist;
-    bool disable_privet{false};
-    bool disable_security{false};
-    bool enable_ping{false};
+    bool disable_privet = false;
+    bool disable_security = false;
+    bool enable_ping = false;
+    std::string test_privet_ssid;
   };
 
   virtual ~Device() = default;
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 1c48548..5638726 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -82,8 +82,8 @@
   if (device->GetConfig().wifi_auto_setup_enabled()) {
     VLOG(1) << "Enabling WiFi bootstrapping.";
     wifi_bootstrap_manager_.reset(new WifiBootstrapManager(
-        device->GetConfig().last_configured_ssid(), shill_client,
-        ap_manager_client_.get(), cloud_.get()));
+        device->GetConfig().last_configured_ssid(), options.test_privet_ssid,
+        shill_client, ap_manager_client_.get(), cloud_.get()));
     wifi_bootstrap_manager_->Init();
   }
 
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index 487450c..a52b11c 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -25,19 +25,21 @@
 
 WifiBootstrapManager::WifiBootstrapManager(
     const std::string& last_configured_ssid,
+    const std::string& test_privet_ssid,
     ShillClient* shill_client,
     ApManagerClient* ap_manager_client,
     CloudDelegate* gcd)
     : shill_client_{shill_client},
       ap_manager_client_{ap_manager_client},
       ssid_generator_{gcd, this},
-      last_configured_ssid_{last_configured_ssid} {
+      last_configured_ssid_{last_configured_ssid},
+      test_privet_ssid_{test_privet_ssid} {
   cloud_observer_.Add(gcd);
 }
 
 void WifiBootstrapManager::Init() {
   CHECK(!is_initialized_);
-  std::string ssid = ssid_generator_.GenerateSsid();
+  std::string ssid = GenerateSsid();
   if (ssid.empty())
     return;  // Delay initialization until ssid_generator_ is ready.
   UpdateConnectionState();
@@ -81,7 +83,7 @@
         base::TimeDelta::FromSeconds(kBootstrapTimeoutSeconds));
   }
   // TODO(vitalybuka): Add SSID probing.
-  std::string ssid = ssid_generator_.GenerateSsid();
+  std::string ssid = GenerateSsid();
   CHECK(!ssid.empty());
   ap_manager_client_->Start(ssid);
 }
@@ -155,6 +157,11 @@
     listener.Run(new_state);
 }
 
+std::string WifiBootstrapManager::GenerateSsid() const {
+  return test_privet_ssid_.empty() ? ssid_generator_.GenerateSsid()
+                                   : test_privet_ssid_;
+}
+
 const ConnectionState& WifiBootstrapManager::GetConnectionState() const {
   return connection_state_;
 }
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index 4a68c46..7ade295 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -36,6 +36,7 @@
   using StateListener = base::Callback<void(State)>;
 
   WifiBootstrapManager(const std::string& last_configured_ssid,
+                       const std::string& test_privet_ssid,
                        ShillClient* shill_client,
                        ApManagerClient* ap_manager_client,
                        CloudDelegate* gcd);
@@ -76,6 +77,8 @@
   void UpdateState(State new_state);
   void NotifyStateListeners(State new_state) const;
 
+  std::string GenerateSsid() const;
+
   // If we've been bootstrapped successfully before, and we're bootstrapping
   // again because we slipped offline for a sufficiently longtime, we want
   // to return to monitoring mode periodically in case our connectivity issues
@@ -101,6 +104,7 @@
   std::vector<StateListener> state_listeners_;
   bool currently_online_{false};
   std::string last_configured_ssid_;
+  std::string test_privet_ssid_;
 
   ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};
 
