/*
 * Copyright (C) 2022 Intel Corporation
 *
 * SPDX-License-Identifier: MIT
 *
 */

#include "shared/source/helpers/file_io.h"
#include "shared/source/os_interface/linux/os_inc.h"
#include "shared/source/utilities/cpu_info.h"
#include "shared/test/common/helpers/variable_backup.h"

#include "gtest/gtest.h"

#include <cstdio>
#include <fstream>

using namespace NEO;

TEST(CpuInfoAarch64, givenProcCpuinfoFileExistsWhenIsCpuFlagPresentIsCalledThenValidValueIsReturned) {
    VariableBackup<const char *> pathPrefixBackup(&Os::sysFsProcPathPrefix, ".");
    std::string cpuinfoFile = "cpuinfo";
    EXPECT_FALSE(fileExists(cpuinfoFile));

    {
        std::ofstream cpuinfo(cpuinfoFile);
        cpuinfo << "processor\t\t: 0\nFeatures\t\t: flag1 flag2 flag3\n";
    }

    EXPECT_TRUE(fileExists(cpuinfoFile));

    CpuInfo testCpuInfo;
    EXPECT_TRUE(testCpuInfo.isCpuFlagPresent("flag1"));
    EXPECT_TRUE(testCpuInfo.isCpuFlagPresent("flag2"));
    EXPECT_FALSE(testCpuInfo.isCpuFlagPresent("nonExistingCpuFlag"));

    std::remove(cpuinfoFile.c_str());
}
