// Copyright 2016 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.

#ifndef IMAGELOADER_TEST_UTILITIES_H_
#define IMAGELOADER_TEST_UTILITIES_H_

#include <stdint.h>

#include <list>
#include <string>

#include <base/files/file_path.h>
#include <base/files/scoped_temp_dir.h>

namespace imageloader {

// Test data always uses the dev key.
constexpr uint8_t kDevPublicKey[] = {
    0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
    0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
    0x42, 0x00, 0x04, 0x7a, 0xaa, 0x2b, 0xf9, 0x3d, 0x7a, 0xbe, 0x35, 0x9a,
    0xfc, 0x9f, 0x39, 0x2d, 0x2d, 0x37, 0x07, 0xd4, 0x19, 0x67, 0x67, 0x30,
    0xbb, 0x5c, 0x74, 0x22, 0xd5, 0x02, 0x07, 0xaf, 0x6b, 0x12, 0x9d, 0x12,
    0xf0, 0x34, 0xfd, 0x1a, 0x7f, 0x02, 0xd8, 0x46, 0x2b, 0x25, 0xca, 0xa0,
    0x6e, 0x2b, 0x54, 0x41, 0xee, 0x92, 0xa2, 0x0f, 0xa2, 0x2a, 0xc0, 0x30,
    0xa6, 0x8c, 0xd1, 0x16, 0x0a, 0x48, 0xca};
// This is the name of the component used in the test data.
constexpr char kTestComponentName[] = "PepperFlashPlayer";
// This is the version of flash player used in the test data.
constexpr char kTestDataVersion[] = "22.0.0.158";
// This is the version of the updated flash player in the test data.
constexpr char kTestUpdatedVersion[] = "22.0.0.256";

// Get the path of the test component in the test data folder.
base::FilePath GetTestDataPath(const std::string& subdir);
base::FilePath GetTestComponentPath();
base::FilePath GetTestComponentPath(const std::string& version);

// Second test key.
constexpr uint8_t kOciDevPublicKey[] = {
    0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
    0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
    0x42, 0x00, 0x04, 0xcc, 0x33, 0xa2, 0xef, 0x3d, 0xa5, 0xb4, 0x04, 0xc5,
    0x9c, 0x99, 0xc1, 0x53, 0xe4, 0xdb, 0xed, 0x34, 0xa4, 0x75, 0x35, 0x44,
    0x5f, 0x67, 0x35, 0xda, 0x30, 0xd4, 0xce, 0xf8, 0x40, 0x03, 0x81, 0x15,
    0xb5, 0xc6, 0xe3, 0xe2, 0x3a, 0x61, 0xd3, 0x66, 0x2b, 0xcd, 0x42, 0xf3,
    0x1f, 0x30, 0xa6, 0xa3, 0xc1, 0x63, 0x47, 0x4a, 0x6e, 0x62, 0xa9, 0x9b,
    0x38, 0x49, 0x10, 0x03, 0xe2, 0x4b, 0xcc};
constexpr char kTestOciComponentName[] = "adb";
constexpr char kTestOciComponentVersion[] = "5.1.1.13";

// Equivalent component but with metadata in the manifest.
constexpr char kMetadataComponentName[] = "adb-with-metadata";
constexpr char kBadMetadataComponentName[] = "adb-with-bad-metadata";
constexpr char kNonDictMetadataComponentName[] = "adb-with-non-dict-metadata";

// Get the path of the test OCI component in the test data folder.
base::FilePath GetTestOciComponentPath();
base::FilePath GetMetadataComponentPath();
base::FilePath GetBadMetadataComponentPath();
base::FilePath GetNonDictMetadataComponentPath();

// Enumerate all files in a directory and return them as a list of filenames.
void GetFilesInDir(const base::FilePath& dir, std::list<std::string>* files);

}  // namespace imageloader

#endif  // IMAGELOADER_TEST_UTILITIES_H_
