#include "chatroom-info.hpp"
#include <boost/test/unit_test.hpp>
#include <ndn-cxx/encoding/block.hpp>

namespace chronochat {

namespace tests {

using std::string;

BOOST_AUTO_TEST_SUITE(TestChatroomInfo)

const uint8_t chatroomInfo[] = {
  0x80, 0x5d, // ChatroomInfo
    0x81, 0x06, // ChatroomName
      0x08, 0x04,
        0x06e, 0x64, 0x6e, 0x64,
    0x82, 0x01, // TrustModel
      0x01,
    0x83, 0x12, // ChatroomPrefix
      0x07, 0x10,
        0x08, 0x03,
          0x6e, 0x64, 0x6e,
        0x08, 0x09,
          0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74,
    0x84, 0x14, // ManagerPrefix
      0x07, 0x12,
        0x08, 0x03,
          0x6e, 0x64, 0x6e,
        0x08, 0x04,
          0x75, 0x63, 0x6c, 0x61,
        0x08, 0x05,
          0x61, 0x6c, 0x69, 0x63, 0x65,
    0x85, 0x26,// Participants
      0x07, 0x12,
        0x08, 0x03,
          0x6e, 0x64, 0x6e,
        0x08, 0x04,
          0x75, 0x63, 0x6c, 0x61,
        0x08, 0x05,
          0x61, 0x6c, 0x69, 0x63, 0x65,
      0x07, 0x10,
        0x08, 0x03,
          0x6e, 0x64, 0x6e,
        0x08, 0x04,
          0x75, 0x63, 0x6c, 0x61,
        0x08, 0x03,
          0x79, 0x6d, 0x6a
};

BOOST_AUTO_TEST_CASE(EncodeChatroom)
{

  // ChatroomInfo := CHATROOM-INFO-TYPE TLV-LENGTH
  //                   ChatroomName
  //                   TrustModel
  //                   ChatroomPrefix
  //                   ManagerPrefix
  //                   Participants
  //
  // ChatroomName := CHATROOM-NAME-TYPE TLV-LENGTH
  //                   NameComponent
  //
  // TrustModel := TRUST-MODEL-TYPE TLV-LENGTH
  //                 nonNegativeInteger
  //
  // ChatroomPrefix := CHATROOM-PREFIX-TYPE TLV-LENGTH
  //                     Name
  //
  // ManagerPrefix := MANAGER-PREFIX-TYPE TLV-LENGTH
  //                    Name
  //
  // Participants := PARTICIPANTS-TYPE TLV-LENGTH
  //                   Name+

  ChatroomInfo chatroom;
  chatroom.setName(ndn::Name::Component("ndnd"));
  chatroom.setManager("/ndn/ucla/alice");
  chatroom.setSyncPrefix("/ndn/broadcast");
  chatroom.addParticipant(Name("/ndn/ucla/alice"));
  chatroom.addParticipant(Name("/ndn/ucla/ymj"));
  chatroom.addParticipant(Name("/ndn/ucla"));
  chatroom.removeParticipant(Name("/ndn/ucla"));
  chatroom.setTrustModel(ChatroomInfo::TRUST_MODEL_WEBOFTRUST);

  const Block& encoded = chatroom.wireEncode();

  Block chatroomInfoBlock(chatroomInfo, sizeof(chatroomInfo));

  BOOST_CHECK_EQUAL_COLLECTIONS(chatroomInfoBlock.wire(),
                                chatroomInfoBlock.wire() + chatroomInfoBlock.size(),
                                encoded.wire(),
                                encoded.wire() + encoded.size());
}

BOOST_AUTO_TEST_CASE(DecodeChatroomCorrect)
{
  ChatroomInfo chatroom;
  chatroom.setName(ndn::Name::Component("ndnd"));
  chatroom.setManager("/ndn/ucla/alice");
  chatroom.setSyncPrefix("/ndn/broadcast");
  chatroom.addParticipant(Name("/ndn/ucla/alice"));
  chatroom.addParticipant(Name("/ndn/ucla/ymj"));
  chatroom.setTrustModel(ChatroomInfo::TRUST_MODEL_WEBOFTRUST);

  Block chatroomInfoBlock(chatroomInfo, sizeof(chatroomInfo));
  ChatroomInfo dechatroom;
  dechatroom.wireDecode(chatroomInfoBlock);

  BOOST_CHECK_EQUAL(chatroom.getName(), dechatroom.getName());
  BOOST_CHECK_EQUAL(chatroom.getSyncPrefix().toUri(), dechatroom.getSyncPrefix().toUri());
  BOOST_CHECK_EQUAL(chatroom.getManagerPrefix().toUri(), dechatroom.getManagerPrefix().toUri());
  BOOST_CHECK_EQUAL(chatroom.getParticipants().size(), dechatroom.getParticipants().size());
  BOOST_CHECK_EQUAL(chatroom.getParticipants().begin()->toUri(),
                    dechatroom.getParticipants().begin()->toUri());
  BOOST_CHECK_EQUAL(chatroom.getParticipants().begin()->toUri(),
                    dechatroom.getParticipants().begin()->toUri());
}

BOOST_AUTO_TEST_CASE(DecodeChatroomError)
{
  const uint8_t error1[] = {
    0x81, 0x5d, // ChatroomInfo Type Error
      0x81, 0x06, // ChatroomName
        0x08, 0x04,
          0x06e, 0x64, 0x6e, 0x64,
      0x82, 0x01, // TrustModel
        0x01,
      0x83, 0x12, // ChatroomPrefix
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x09,
            0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74,
      0x84, 0x14, // ManagerPrefix
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
      0x85, 0x26,// Participants
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x03,
            0x79, 0x6d, 0x6a
  };

  Block errorBlock1(error1, sizeof(error1));
  BOOST_CHECK_THROW(ChatroomInfo chatroom(errorBlock1), ChatroomInfo::Error);

  const uint8_t error2[] = {
    0x80, 0x5d, // ChatroomInfo
      0x81, 0x06, // ChatroomName
        0x08, 0x04,
          0x06e, 0x64, 0x6e, 0x64,
      0x83, 0x01, // TrustModel Type Error
        0x01,
      0x83, 0x12, // ChatroomPrefix
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x09,
            0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74,
      0x84, 0x14, // ManagerPrefix
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
      0x85, 0x26,// Participants
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x03,
            0x79, 0x6d, 0x6a
  };

  Block errorBlock2(error2, sizeof(error2));
  BOOST_CHECK_THROW(ChatroomInfo chatroom(errorBlock2), ChatroomInfo::Error);

  const uint8_t error3[] = {
    0x80, 0x5d, // ChatroomInfo
      0x81, 0x06, // ChatroomName
        0x08, 0x04,
          0x06e, 0x64, 0x6e, 0x64,
      0x82, 0x01, // TrustModel
        0x01,
      0x80, 0x12, // ChatroomPrefix Type Error
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x09,
            0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74,
      0x84, 0x14, // ManagerPrefix
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
      0x85, 0x26,// Participants
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x03,
            0x79, 0x6d, 0x6a
  };

  Block errorBlock3(error3, sizeof(error3));
  BOOST_CHECK_THROW(ChatroomInfo chatroom(errorBlock3), ChatroomInfo::Error);

  const uint8_t error4[] = {
    0x80, 0x5d, // ChatroomInfo
      0x81, 0x06, // ChatroomName
        0x08, 0x04,
          0x06e, 0x64, 0x6e, 0x64,
      0x82, 0x01, // TrustModel
        0x01,
      0x83, 0x12, // ChatroomPrefix
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x09,
            0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74,
      0x80, 0x14, // ManagerPrefix Error Type
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
      0x85, 0x26,// Participants
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x03,
            0x79, 0x6d, 0x6a
  };

  Block errorBlock4(error4, sizeof(error4));
  BOOST_CHECK_THROW(ChatroomInfo chatroom(errorBlock4), ChatroomInfo::Error);

  const uint8_t error5[] = {
    0x80, 0x5d, // ChatroomInfo
      0x81, 0x06, // ChatroomName
        0x08, 0x04,
          0x06e, 0x64, 0x6e, 0x64,
      0x82, 0x01, // TrustModel
        0x01,
      0x83, 0x12, // ChatroomPrefix
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x09,
            0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74,
      0x84, 0x14, // ManagerPrefix
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
      0x80, 0x26,// Participants Error Type
        0x07, 0x12,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x05,
            0x61, 0x6c, 0x69, 0x63, 0x65,
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x04,
            0x75, 0x63, 0x6c, 0x61,
          0x08, 0x03,
            0x79, 0x6d, 0x6a
  };

  Block errorBlock5(error5, sizeof(error5));
  BOOST_CHECK_THROW(ChatroomInfo chatroom(errorBlock5), ChatroomInfo::Error);

  const uint8_t error6[] = {
    0x80, 0x00 // Empty ChatroomInfo
  };

  Block errorBlock6(error6, sizeof(error6));
  BOOST_CHECK_THROW(ChatroomInfo chatroom(errorBlock6), ChatroomInfo::Error);

  const uint8_t error7[] = {
    0x80, 0x1f, // ChatroomInfo
      0x81, 0x06, // ChatroomName
        0x08, 0x04,
          0x06e, 0x64, 0x6e, 0x64,
      0x82, 0x01, // TrustModel
        0x01,
      0x83, 0x12, // ChatroomPrefix
        0x07, 0x10,
          0x08, 0x03,
            0x6e, 0x64, 0x6e,
          0x08, 0x09,
            0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74,
    // no Participant
  };

  Block errorBlock7(error7, sizeof(error7));
  BOOST_CHECK_THROW(ChatroomInfo chatroom(errorBlock7), ChatroomInfo::Error);
}

BOOST_AUTO_TEST_SUITE_END()

} // namespace tests

} // namespace chronochat
