// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "shill/net/nl80211_message.h"

#include <string>
#include <vector>

#include <gtest/gtest.h>

#include "shill/net/byte_string.h"

namespace shill {
namespace {

// wlan0 (phy #0): auth c0:3f:0e:77:e8:7f -> 48:5d:60:77:2d:cf status: 0:
// Successful [frame: b0 00 3a 01 48 5d 60 77 2d cf c0 3f 0e 77 e8 7f c0
// 3f 0e 77 e8 7f 30 07 00 00 02 00 00 00]
const unsigned char kAuthenticateFrame[] = {
    0xb0, 0x00, 0x3a, 0x01, 0x48, 0x5d, 0x60, 0x77, 0x2d, 0xcf,
    0xc0, 0x3f, 0x0e, 0x77, 0xe8, 0x7f, 0xc0, 0x3f, 0x0e, 0x77,
    0xe8, 0x7f, 0x30, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
};

// wlan0 (phy #0): deauth c0:3f:0e:77:e8:7f -> ff:ff:ff:ff:ff:ff reason 2:
// Previous authentication no longer valid [frame: c0 00 00 00 ff ff ff ff
// ff ff c0 3f 0e 77 e8 7f c0 3f 0e 77 e8 7f c0 0e 02 00]
const unsigned char kDeauthenticateFrame[] = {
    0xc0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xc0, 0x3f, 0x0e, 0x77, 0xe8, 0x7f, 0xc0, 0x3f,
    0x0e, 0x77, 0xe8, 0x7f, 0xc0, 0x0e, 0x02, 0x00,
};

TEST(Nl80211FrameTest, EmptyFrameToString) {
  Nl80211Frame frame(ByteString{});
  EXPECT_EQ(frame.ToString(), "[no frame]");
  EXPECT_EQ(frame.frame_type(), Nl80211Frame::kIllegalFrameType);
}

TEST(Nl80211FrameTest, ToStringWithStatus) {
  Nl80211Frame frame(
      ByteString(kAuthenticateFrame, sizeof(kAuthenticateFrame)));
  std::string expected_output =
      "48:5d:60:77:2d:cf -> c0:3f:0e:77:e8:7f; Auth status: 0: Successful "
      "[frame: b0, 00, 3a, 01, 48, 5d, 60, 77, 2d, cf, c0, 3f, 0e, 77, e8, 7f, "
      "c0, 3f, 0e, 77, e8, 7f, 30, 07, 00, 00, 02, 00, 00, 00, ]";
  EXPECT_EQ(frame.ToString(), expected_output);
}

TEST(Nl80211FrameTest, ToStringWithReason) {
  Nl80211Frame frame(
      ByteString(kDeauthenticateFrame, sizeof(kDeauthenticateFrame)));
  std::string expected_output =
      "ff:ff:ff:ff:ff:ff -> c0:3f:0e:77:e8:7f; Deauth reason 2: Previous "
      "authentication no longer valid [frame: c0, 00, 00, 00, ff, ff, ff, ff, "
      "ff, ff, c0, 3f, 0e, 77, e8, 7f, c0, 3f, 0e, 77, e8, 7f, c0, 0e, 02, 00, "
      "]";
  EXPECT_EQ(frame.ToString(), expected_output);
  EXPECT_EQ(frame.frame_type(), Nl80211Frame::kDeauthFrameType);
  EXPECT_EQ(frame.reason(), 2);
}

}  // namespace
}  // namespace shill
