/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *    All rights reserved.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

#include <gtest/gtest.h>

#include <lib/core/CASEAuthTag.h>

using namespace chip;

TEST(TestCATValues, TestEqualityOperator)
{
    {
        auto a                 = CATValues{ { 0x1111'0001, 0x2222'0002, 0x3333'0003 } };
        auto b                 = CATValues{ { 0x1111'0001, 0x3333'0003, 0x2222'0002 } };
        auto c                 = CATValues{ { 0x2222'0002, 0x1111'0001, 0x3333'0003 } };
        auto d                 = CATValues{ { 0x2222'0002, 0x3333'0003, 0x1111'0001 } };
        auto e                 = CATValues{ { 0x3333'0003, 0x1111'0001, 0x2222'0002 } };
        auto f                 = CATValues{ { 0x3333'0003, 0x2222'0002, 0x1111'0001 } };
        CATValues candidates[] = { a, b, c, d, e, f };
        for (auto & outer : candidates)
        {
            for (auto & inner : candidates)
            {
                EXPECT_EQ(inner, outer);
            }
        }
    }
    {
        auto a                 = CATValues{ {} };
        auto b                 = CATValues{ {} };
        CATValues candidates[] = { a, b };
        for (auto & outer : candidates)
        {
            for (auto & inner : candidates)
            {
                EXPECT_EQ(inner, outer);
            }
        }
    }

    {
        auto a                 = CATValues{ { 0x1111'0001, kUndefinedCAT, 0x2222'0002 } };
        auto b                 = CATValues{ { 0x2222'0002, kUndefinedCAT, 0x1111'0001 } };
        auto c                 = CATValues{ { 0x1111'0001, 0x2222'0002 } };
        auto d                 = CATValues{ { 0x2222'0002, 0x1111'0001 } };
        CATValues candidates[] = { a, b, c, d };

        for (auto & outer : candidates)
        {
            for (auto & inner : candidates)
            {
                EXPECT_EQ(inner, outer);
            }
        }
    }
}

TEST(TestCATValues, TestInequalityOperator)
{
    auto a                 = CATValues{ { 0x1111'0001 } };
    auto b                 = CATValues{ { 0x1111'0001, 0x2222'0002 } };
    auto c                 = CATValues{ { 0x1111'0001, 0x2222'0002, 0x3333'0003 } };
    auto d                 = CATValues{ { 0x2222'0002 } };
    auto e                 = CATValues{ { 0x2222'0002, 0x3333'0003 } };
    auto f                 = CATValues{ { 0x2222'0002, 0x3333'0003, 0x4444'0004 } };
    auto g                 = CATValues{ { 0x3333'0003 } };
    auto h                 = CATValues{ { 0x3333'0003, 0x4444'0004 } };
    auto i                 = CATValues{ { 0x3333'0003, 0x4444'0004, 0x5555'0005 } };
    auto j                 = CATValues{ { 0x4444'0004 } };
    auto k                 = CATValues{ { 0x4444'0004, 0x5555'0005 } };
    auto l                 = CATValues{ { 0x4444'0004, 0x5555'0005, 0x6666'0006 } };
    auto m                 = CATValues{ { 0x5555'0005 } };
    auto n                 = CATValues{ { 0x5555'0005, 0x6666'0006 } };
    auto o                 = CATValues{ { 0x5555'0005, 0x6666'0006, 0x7777'0007 } };
    auto p                 = CATValues{ { 0x6666'0006 } };
    auto q                 = CATValues{ { 0x6666'0006, 0x7777'0007 } };
    auto r                 = CATValues{ { 0x6666'0006, 0x7777'0007, 0x8888'0008 } };
    auto s                 = CATValues{ { 0x7777'0007 } };
    auto t                 = CATValues{ { 0x7777'0007, 0x8888'0008 } };
    auto u                 = CATValues{ { 0x7777'0007, 0x8888'0008, 0x9999'0009 } };
    CATValues candidates[] = { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u };
    for (auto & outer : candidates)
    {
        for (auto & inner : candidates)
        {
            if (&inner == &outer)
            {
                continue;
            }
            EXPECT_NE(inner, outer);
        }
    }
}

TEST(TestCATValues, TestValidity)
{
    {
        auto a                      = CATValues{ { 0x1111'0001, 0x2222'0002, 0x3333'0003 } };
        auto b                      = CATValues{ { 0x1111'0001, 0x3333'0003, 0x2222'0002 } };
        auto c                      = CATValues{ { 0x2222'0002 } };
        auto d                      = CATValues{ { 0x2222'0002, 0x3333'0003 } };
        auto e                      = CATValues{ { 0x2222'0002, kUndefinedCAT, 0x3333'0003 } };
        CATValues validCandidates[] = { a, b, c, d, e };
        for (auto & candidate : validCandidates)
        {
            EXPECT_TRUE(candidate.AreValid());
        }
    }

    {
        auto versionZero1             = CATValues{ { 0x1111'0000, 0x2222'0002, 0x3333'0003 } };
        auto versionZero2             = CATValues{ { 0x2222'0000 } };
        auto collidingId              = CATValues{ { 0x1111'0001, 0x3333'0003, 0x1111'0002 } };
        CATValues invalidCandidates[] = { versionZero1, versionZero2, collidingId };
        for (auto & candidate : invalidCandidates)
        {
            EXPECT_FALSE(candidate.AreValid());
        }
    }
}

TEST(TestCATValues, TestMembership)
{
    auto a = CATValues{ { 0x1111'0001 } };
    auto b = CATValues{ { 0x1111'0001, 0x2222'0002 } };
    auto c = CATValues{ { 0x1111'0001, 0x2222'0002, 0x3333'0003 } };

    EXPECT_TRUE(a.Contains(0x1111'0001));
    EXPECT_EQ(a.GetNumTagsPresent(), 1u);
    EXPECT_FALSE(a.Contains(0x1111'0002));
    EXPECT_FALSE(a.Contains(0x2222'0002));
    EXPECT_TRUE(a.ContainsIdentifier(0x1111));
    EXPECT_FALSE(a.ContainsIdentifier(0x2222));
    EXPECT_TRUE(a.AreValid());

    EXPECT_TRUE(b.Contains(0x1111'0001));
    EXPECT_TRUE(b.Contains(0x2222'0002));
    EXPECT_EQ(b.GetNumTagsPresent(), 2u);
    EXPECT_TRUE(b.ContainsIdentifier(0x1111));
    EXPECT_TRUE(b.ContainsIdentifier(0x2222));
    EXPECT_TRUE(b.AreValid());

    EXPECT_TRUE(c.Contains(0x1111'0001));
    EXPECT_TRUE(c.Contains(0x2222'0002));
    EXPECT_TRUE(c.Contains(0x3333'0003));
    EXPECT_EQ(c.GetNumTagsPresent(), 3u);
    EXPECT_TRUE(c.ContainsIdentifier(0x1111));
    EXPECT_TRUE(c.ContainsIdentifier(0x2222));
    EXPECT_TRUE(c.ContainsIdentifier(0x3333));
    EXPECT_TRUE(c.AreValid());
}

TEST(TestCATValues, TestSubjectMatching)
{
    // Check operational node IDs don't match
    auto a = CATValues{ { 0x2222'0002 } };
    EXPECT_FALSE(a.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0x0001'0002'0003'0004ull)));
    EXPECT_FALSE(a.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0x0001'0002'2222'0002ull)));

    auto b = CATValues{ { 0x1111'0001 } };
    EXPECT_TRUE(b.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'1111'0001ull)));
    EXPECT_FALSE(b.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'1111'0002ull)));

    auto c = CATValues{ { 0x1111'0001, 0x2222'0002 } };
    EXPECT_TRUE(c.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'2222'0001ull)));
    EXPECT_TRUE(c.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'2222'0002ull)));
    EXPECT_FALSE(c.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'2222'0003ull)));

    auto d = CATValues{ { 0x1111'0001, 0x2222'0002, 0x3333'0003 } };
    EXPECT_TRUE(d.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'0001ull)));
    EXPECT_TRUE(d.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'0002ull)));
    EXPECT_TRUE(d.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'0003ull)));
    EXPECT_FALSE(d.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'0004ull)));
    EXPECT_FALSE(d.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'ffffull)));

    auto e = CATValues{ { 0x1111'0001, 0x2222'0002, 0x3333'ffff } };
    EXPECT_TRUE(e.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'0001ull)));
    EXPECT_TRUE(e.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'0002ull)));
    EXPECT_TRUE(e.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'0003ull)));
    EXPECT_TRUE(e.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'0004ull)));
    EXPECT_TRUE(e.CheckSubjectAgainstCATs(static_cast<chip::NodeId>(0xFFFF'FFFD'3333'ffffull)));
}
