Commit 6e37f17a authored by ckehoe's avatar ckehoe Committed by Commit bot

1. Token CRCs are not handled correctly. This adds the corrected Whispernet...

1. Token CRCs are not handled correctly. This adds the corrected Whispernet binary (from cl/87383487), and a test to confirm the correct behavior.

2. If we get tokens that require more than one padding character, the padding will not be completely removed when appropriate. This is a simple change in the js.

BUG=463218

Review URL: https://codereview.chromium.org/969843002

Cr-Commit-Position: refs/heads/master@{#319015}
parent 33b30e7b
......@@ -33,7 +33,7 @@ using audio_modem::TokenParameters;
namespace {
// TODO(rkc): Add more varied test input.
// TODO(ckehoe): Use randomly generated tokens instead.
const char kSixZeros[] = "MDAwMDAw";
const char kEightZeros[] = "MDAwMDAwMDA";
const char kNineZeros[] = "MDAwMDAwMDAw";
......@@ -114,7 +114,8 @@ class ChromeWhispernetClientTest : public ExtensionBrowserTest,
void EncodeTokenAndSaveSamples(WhispernetClient* client,
bool audible,
const std::string& token) {
const std::string& token,
const TokenParameters token_params[2]) {
run_loop_.reset(new base::RunLoop());
client->RegisterSamplesCallback(
base::Bind(&ChromeWhispernetClientTest::SamplesCallback,
......@@ -122,7 +123,6 @@ class ChromeWhispernetClientTest : public ExtensionBrowserTest,
expected_token_ = token;
expected_audible_ = audible;
TokenParameters token_params[2];
client->EncodeToken(token, audible ? AUDIBLE : INAUDIBLE, token_params);
run_loop_->Run();
......@@ -236,11 +236,13 @@ class ChromeWhispernetClientTest : public ExtensionBrowserTest,
#define MAYBE_Initialize DISABLED_Initialize
#define MAYBE_EncodeAndDecode DISABLED_EncodeAndDecode
#define MAYBE_TokenLengths DISABLED_TokenLengths
#define MAYBE_Crc DISABLED_Crc
#define MAYBE_MultipleClients DISABLED_MultipleClients
#else
#define MAYBE_Initialize Initialize
#define MAYBE_EncodeAndDecode EncodeAndDecode
#define MAYBE_TokenLengths TokenLengths
#define MAYBE_Crc Crc
#define MAYBE_MultipleClients MultipleClients
#endif
......@@ -257,10 +259,10 @@ IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_EncodeAndDecode) {
TokenParameters token_params[2];
GetTokenParamsForLengths(kTokenLengths, token_params);
EncodeTokenAndSaveSamples(client.get(), true, kSixZeros);
EncodeTokenAndSaveSamples(client.get(), true, kSixZeros, token_params);
DecodeSamplesAndVerifyToken(client.get(), true, kSixZeros, token_params);
EncodeTokenAndSaveSamples(client.get(), false, kSixZeros);
EncodeTokenAndSaveSamples(client.get(), false, kSixZeros, token_params);
DecodeSamplesAndVerifyToken(client.get(), false, kSixZeros, token_params);
}
......@@ -274,13 +276,31 @@ IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_TokenLengths) {
TokenParameters token_params[2];
GetTokenParamsForLengths(kLongTokenLengths, token_params);
EncodeTokenAndSaveSamples(client.get(), true, kEightZeros);
EncodeTokenAndSaveSamples(client.get(), true, kEightZeros, token_params);
DecodeSamplesAndVerifyToken(client.get(), true, kEightZeros, token_params);
EncodeTokenAndSaveSamples(client.get(), false, kNineZeros);
EncodeTokenAndSaveSamples(client.get(), false, kNineZeros, token_params);
DecodeSamplesAndVerifyToken(client.get(), false, kNineZeros, token_params);
}
IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_Crc) {
scoped_ptr<WhispernetClient> client(
new ChromeWhispernetClient(browser()->profile()));
client->Initialize(base::Bind(&IgnoreResult));
SetupDecode();
TokenParameters token_params[2];
GetTokenParamsForLengths(kTokenLengths, token_params);
token_params[0].crc = true;
token_params[1].crc = true;
EncodeTokenAndSaveSamples(client.get(), true, kSixZeros, token_params);
DecodeSamplesAndVerifyToken(client.get(), true, kSixZeros, token_params);
EncodeTokenAndSaveSamples(client.get(), false, kSixZeros, token_params);
DecodeSamplesAndVerifyToken(client.get(), false, kSixZeros, token_params);
}
IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_MultipleClients) {
scoped_ptr<WhispernetClient> client_1(
new ChromeWhispernetClient(browser()->profile()));
......@@ -297,24 +317,21 @@ IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, MAYBE_MultipleClients) {
client_1->Initialize(base::Bind(&IgnoreResult));
client_2->Initialize(base::Bind(&IgnoreResult));
EncodeTokenAndSaveSamples(client_1.get(), true, kSixZeros);
EncodeTokenAndSaveSamples(client_1.get(), true, kSixZeros, token_params);
DecodeSamplesAndVerifyToken(client_1.get(), true, kSixZeros, token_params);
EncodeTokenAndSaveSamples(client_2.get(), false, kSixZeros);
EncodeTokenAndSaveSamples(client_2.get(), false, kSixZeros, token_params);
DecodeSamplesAndVerifyToken(client_2.get(), false, kSixZeros, token_params);
// Test sequential initialization.
client_3->Initialize(base::Bind(&IgnoreResult));
EncodeTokenAndSaveSamples(client_3.get(), true, kSixZeros);
EncodeTokenAndSaveSamples(client_3.get(), true, kSixZeros, token_params);
DecodeSamplesAndVerifyToken(client_3.get(), true, kSixZeros, token_params);
const size_t kLongTokenLengths[2] = {8, 9};
GetTokenParamsForLengths(kLongTokenLengths, token_params);
EncodeTokenAndSaveSamples(client_2.get(), true, kEightZeros);
EncodeTokenAndSaveSamples(client_2.get(), true, kEightZeros, token_params);
DecodeSamplesAndVerifyToken(client_2.get(), true, kEightZeros, token_params);
}
// TODO(ckehoe): Test crc and parity
// TODO(ckehoe): More multi-client testing
......@@ -20,7 +20,7 @@ function NaclBridge(nmf, readyCallback) {
/**
* Method to send generic byte data to the whispernet wrapper.
* @param {string} data Raw data to send to the whispernet wrapper.
* @param {Object} data Raw data to send to the whispernet wrapper.
*/
NaclBridge.prototype.send = function(data) {
if (this.isEnabled_) {
......
......@@ -14,7 +14,7 @@ function bytesToBase64(bytes) {
var bstr = '';
for (var i = 0; i < bytes.length; ++i)
bstr += String.fromCharCode(bytes[i]);
return btoa(bstr).replace('=', '');
return btoa(bstr).replace(/=/g, '');
}
/**
......
{
"program": {
"portable": {
"pnacl-translate": { "url": "whispernet_proxy_pnacl.pexe.png?v00006" }
"pnacl-translate": { "url": "whispernet_proxy_pnacl.pexe.png?v00007" }
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment