Set "WiFi discovery" bit of device flags according state of Hosted SSID. Return true only if device is hosting AP or if flags are being generated for SSID. BUG:25597839 Change-Id: Idca4f3dbb915e7af0375832260f8280a6b7b08b1 Reviewed-on: https://weave-review.googlesource.com/1529 Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/src/privet/wifi_ssid_generator.cc b/src/privet/wifi_ssid_generator.cc index a049c20..697e5d8 100644 --- a/src/privet/wifi_ssid_generator.cc +++ b/src/privet/wifi_ssid_generator.cc
@@ -52,6 +52,10 @@ } std::string WifiSsidGenerator::GenerateFlags() const { + return GenerateFlagsInternal(false); +} + +std::string WifiSsidGenerator::GenerateFlagsInternal(bool for_ssid) const { std::bitset<6> flags1; // Device needs WiFi configuration. flags1[0] = wifi_ && IsSetupNeeded(wifi_->GetConnectionState()); @@ -59,8 +63,9 @@ flags1[1] = IsSetupNeeded(gcd_->GetConnectionState()); std::bitset<6> flags2; + // Device is discoverable over WiFi. - flags2[0] = true; + flags2[0] = for_ssid || (wifi_ && !wifi_->GetHostedSsid().empty()); std::string result{2, base64chars[0]}; result[0] = base64chars[flags1.to_ulong()]; @@ -77,7 +82,7 @@ std::string result = base::StringPrintf(kSsidFormat, name.c_str(), idx.c_str(), - model_id.c_str(), GenerateFlags().c_str()); + model_id.c_str(), GenerateFlagsInternal(true).c_str()); CHECK_EQ(result[result.size() - 11], '.'); return result; }
diff --git a/src/privet/wifi_ssid_generator.h b/src/privet/wifi_ssid_generator.h index d720fb5..2b86f28 100644 --- a/src/privet/wifi_ssid_generator.h +++ b/src/privet/wifi_ssid_generator.h
@@ -30,6 +30,7 @@ // Sets object to use |n| instead of random number for SSID generation. void SetRandomForTests(int n); + std::string GenerateFlagsInternal(bool for_ssid) const; const CloudDelegate* gcd_{nullptr}; const WifiDelegate* wifi_{nullptr};
diff --git a/src/privet/wifi_ssid_generator_unittest.cc b/src/privet/wifi_ssid_generator_unittest.cc index 3bd561f..398e105 100644 --- a/src/privet/wifi_ssid_generator_unittest.cc +++ b/src/privet/wifi_ssid_generator_unittest.cc
@@ -22,7 +22,26 @@ WifiSsidGenerator ssid_generator_{&gcd_, &wifi_}; }; -TEST_F(WifiSsidGeneratorTest, GenerateFlags) { +TEST_F(WifiSsidGeneratorTest, GenerateFlagsNoHostedAp) { + EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2); + + wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; + gcd_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; + EXPECT_EQ("DA", ssid_generator_.GenerateFlags()); + + wifi_.connection_state_ = ConnectionState{ConnectionState::kOnline}; + EXPECT_EQ("CA", ssid_generator_.GenerateFlags()); + + gcd_.connection_state_ = ConnectionState{ConnectionState::kOffline}; + EXPECT_EQ("AA", ssid_generator_.GenerateFlags()); + + wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; + EXPECT_EQ("BA", ssid_generator_.GenerateFlags()); +} + +TEST_F(WifiSsidGeneratorTest, GenerateFlagsWithHostedAp) { + EXPECT_CALL(wifi_, GetHostedSsid()) + .WillRepeatedly(Return(ssid_generator_.GenerateSsid())); EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2); wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};