Add instructions to build on Alpine Linux
- Also fixed compilations in Alpine Linux and other flavors of Linux. - Added container versions in docker files to always use a verified version. Closes #164. Change-Id: I949a8709e4d70c49129c9c2e8608dd78193d964c
This commit is contained in:
parent
9e9833ea63
commit
715ed939f1
|
@ -232,6 +232,31 @@ $ ninja -C out/Release
|
||||||
|
|
||||||
## Notes for other linux distros
|
## Notes for other linux distros
|
||||||
|
|
||||||
|
### Alpine Linux
|
||||||
|
|
||||||
|
Use `apk` command to install dependencies:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$apk add --no-cache bash build-base curl findutils git ninja python \
|
||||||
|
bsd-compat-headers linux-headers libexecinfo-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Alpine uses musl which does not have mallinfo defined in malloc.h. It is
|
||||||
|
required by one of Shaka Packager's dependency. To workaround the problem, a
|
||||||
|
dummy structure has to be defined in /usr/include/malloc.h, e.g.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ sed -i \
|
||||||
|
'/malloc_usable_size/a \\nstruct mallinfo {\n int arena;\n int hblkhd;\n int uordblks;\n};' \
|
||||||
|
/usr/include/malloc.h
|
||||||
|
```
|
||||||
|
|
||||||
|
We also need to disable clang and some other features to make it work with musl:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
export GYP_DEFINES='linux_use_bundled_binutils=0 linux_use_bundled_gold=0 clang=0 use_experimental_allocator_shim=0 use_allocator=none musl=1'
|
||||||
|
```
|
||||||
|
|
||||||
### Arch Linux
|
### Arch Linux
|
||||||
|
|
||||||
Instead of running `sudo apt-get install` to install build dependencies, run:
|
Instead of running `sudo apt-get install` to install build dependencies, run:
|
||||||
|
@ -251,6 +276,12 @@ $ gpg --keyserver pgp.mit.edu --recv-keys F7E48EDB
|
||||||
$ makepkg -si
|
$ makepkg -si
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Optionally, disable clang to build with gcc:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ export GYP_DEFINES='clang=0'
|
||||||
|
```
|
||||||
|
|
||||||
### Debian
|
### Debian
|
||||||
|
|
||||||
Same as Ubuntu.
|
Same as Ubuntu.
|
||||||
|
|
|
@ -10,8 +10,11 @@
|
||||||
'variables': {
|
'variables': {
|
||||||
'variables': {
|
'variables': {
|
||||||
'shaka_code%': 0,
|
'shaka_code%': 0,
|
||||||
|
# musl is a lightweight C standard library used in Alpine Linux.
|
||||||
|
'musl%': 0,
|
||||||
},
|
},
|
||||||
'shaka_code%': '<(shaka_code)',
|
'shaka_code%': '<(shaka_code)',
|
||||||
|
'musl%': '<(musl)',
|
||||||
'libpackager_type%': 'static_library',
|
'libpackager_type%': 'static_library',
|
||||||
'conditions': [
|
'conditions': [
|
||||||
['shaka_code==1', {
|
['shaka_code==1', {
|
||||||
|
@ -75,6 +78,20 @@
|
||||||
}],
|
}],
|
||||||
],
|
],
|
||||||
}],
|
}],
|
||||||
|
['musl==1', {
|
||||||
|
'defines': [
|
||||||
|
# musl is not uClibc but is similar to uClibc that a minimal feature
|
||||||
|
# set is supported. One of Shaka Packager's dependencies, Chromium
|
||||||
|
# base uses __UCLIBC__ flag to disable some features, which needs to
|
||||||
|
# be disabled for musl too.
|
||||||
|
'__UCLIBC__',
|
||||||
|
],
|
||||||
|
'cflags!': [
|
||||||
|
# Do not treat warnings as errors on musl as there is a hard-coded
|
||||||
|
# warning in musl's sys/errno.h.
|
||||||
|
'-Werror',
|
||||||
|
],
|
||||||
|
}]
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#define INVALID_SOCKET -1
|
#define INVALID_SOCKET -1
|
||||||
|
|
||||||
|
|
|
@ -53,12 +53,6 @@ const uint8_t kAesCtrCiphertext[] = {
|
||||||
0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1,
|
0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1,
|
||||||
0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee};
|
0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee};
|
||||||
|
|
||||||
// Subsample test cases.
|
|
||||||
struct SubsampleTestCase {
|
|
||||||
const uint8_t* subsample_sizes;
|
|
||||||
uint32_t subsample_count;
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t kSubsampleTest1[] = {64};
|
const uint8_t kSubsampleTest1[] = {64};
|
||||||
const uint8_t kSubsampleTest2[] = {13, 51};
|
const uint8_t kSubsampleTest2[] = {13, 51};
|
||||||
const uint8_t kSubsampleTest3[] = {52, 12};
|
const uint8_t kSubsampleTest3[] = {52, 12};
|
||||||
|
@ -70,18 +64,6 @@ const uint8_t kSubsampleTest8[] = {10, 1, 33, 20};
|
||||||
const uint8_t kSubsampleTest9[] = {7, 19, 6, 32};
|
const uint8_t kSubsampleTest9[] = {7, 19, 6, 32};
|
||||||
const uint8_t kSubsampleTest10[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9};
|
const uint8_t kSubsampleTest10[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9};
|
||||||
|
|
||||||
const SubsampleTestCase kSubsampleTestCases[] = {
|
|
||||||
{kSubsampleTest1, arraysize(kSubsampleTest1)},
|
|
||||||
{kSubsampleTest2, arraysize(kSubsampleTest2)},
|
|
||||||
{kSubsampleTest3, arraysize(kSubsampleTest3)},
|
|
||||||
{kSubsampleTest4, arraysize(kSubsampleTest4)},
|
|
||||||
{kSubsampleTest5, arraysize(kSubsampleTest5)},
|
|
||||||
{kSubsampleTest6, arraysize(kSubsampleTest6)},
|
|
||||||
{kSubsampleTest7, arraysize(kSubsampleTest7)},
|
|
||||||
{kSubsampleTest8, arraysize(kSubsampleTest8)},
|
|
||||||
{kSubsampleTest9, arraysize(kSubsampleTest9)},
|
|
||||||
{kSubsampleTest10, arraysize(kSubsampleTest10)}};
|
|
||||||
|
|
||||||
// IV test values.
|
// IV test values.
|
||||||
const uint32_t kTextSizeInBytes = 60; // 3 full blocks + 1 partial block.
|
const uint32_t kTextSizeInBytes = 60; // 3 full blocks + 1 partial block.
|
||||||
|
|
||||||
|
@ -102,26 +84,6 @@ const uint8_t kIv64MaxMinusOne[] = {0xff, 0xff, 0xff, 0xff,
|
||||||
0xff, 0xff, 0xff, 0xfe};
|
0xff, 0xff, 0xff, 0xfe};
|
||||||
const uint8_t kIv64Max[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
const uint8_t kIv64Max[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
||||||
|
|
||||||
struct IvTestCase {
|
|
||||||
const uint8_t* iv_test;
|
|
||||||
uint32_t iv_size;
|
|
||||||
const uint8_t* iv_expected;
|
|
||||||
};
|
|
||||||
|
|
||||||
// As recommended in ISO/IEC FDIS 23001-7: CENC spec,
|
|
||||||
// For 64-bit (8-byte) IV_Sizes, initialization vectors for subsequent samples
|
|
||||||
// can be created by incrementing the initialization vector of the previous
|
|
||||||
// sample. For 128-bit (16-byte) IV_Sizes, initialization vectors for subsequent
|
|
||||||
// samples should be created by adding the block count of the previous sample to
|
|
||||||
// the initialization vector of the previous sample.
|
|
||||||
const IvTestCase kIvTestCases[] = {
|
|
||||||
{kIv128Zero, arraysize(kIv128Zero), kIv128Four},
|
|
||||||
{kIv128Max64, arraysize(kIv128Max64), kIv128OneAndThree},
|
|
||||||
{kIv128MaxMinusOne, arraysize(kIv128MaxMinusOne), kIv128Two},
|
|
||||||
{kIv64Zero, arraysize(kIv64Zero), kIv64One},
|
|
||||||
{kIv64MaxMinusOne, arraysize(kIv64MaxMinusOne), kIv64Max},
|
|
||||||
{kIv64Max, arraysize(kIv64Max), kIv64Zero}};
|
|
||||||
|
|
||||||
// We support AES 128, i.e. 16 bytes key only.
|
// We support AES 128, i.e. 16 bytes key only.
|
||||||
const uint8_t kInvalidKey[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2,
|
const uint8_t kInvalidKey[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2,
|
||||||
0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09};
|
0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09};
|
||||||
|
@ -253,6 +215,12 @@ TEST_F(AesCtrEncryptorTest, UnsupportedIV) {
|
||||||
ASSERT_FALSE(encryptor_.InitializeWithIv(key_, iv));
|
ASSERT_FALSE(encryptor_.InitializeWithIv(key_, iv));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Subsample test cases.
|
||||||
|
struct SubsampleTestCase {
|
||||||
|
const uint8_t* subsample_sizes;
|
||||||
|
uint32_t subsample_count;
|
||||||
|
};
|
||||||
|
|
||||||
class AesCtrEncryptorSubsampleTest
|
class AesCtrEncryptorSubsampleTest
|
||||||
: public AesCtrEncryptorTest,
|
: public AesCtrEncryptorTest,
|
||||||
public ::testing::WithParamInterface<SubsampleTestCase> {};
|
public ::testing::WithParamInterface<SubsampleTestCase> {};
|
||||||
|
@ -280,10 +248,30 @@ TEST_P(AesCtrEncryptorSubsampleTest, NistTestCaseSubsamples) {
|
||||||
EXPECT_EQ(plaintext_, decrypted);
|
EXPECT_EQ(plaintext_, decrypted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
const SubsampleTestCase kSubsampleTestCases[] = {
|
||||||
|
{kSubsampleTest1, arraysize(kSubsampleTest1)},
|
||||||
|
{kSubsampleTest2, arraysize(kSubsampleTest2)},
|
||||||
|
{kSubsampleTest3, arraysize(kSubsampleTest3)},
|
||||||
|
{kSubsampleTest4, arraysize(kSubsampleTest4)},
|
||||||
|
{kSubsampleTest5, arraysize(kSubsampleTest5)},
|
||||||
|
{kSubsampleTest6, arraysize(kSubsampleTest6)},
|
||||||
|
{kSubsampleTest7, arraysize(kSubsampleTest7)},
|
||||||
|
{kSubsampleTest8, arraysize(kSubsampleTest8)},
|
||||||
|
{kSubsampleTest9, arraysize(kSubsampleTest9)},
|
||||||
|
{kSubsampleTest10, arraysize(kSubsampleTest10)}};
|
||||||
|
} // namespace
|
||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(SubsampleTestCases,
|
INSTANTIATE_TEST_CASE_P(SubsampleTestCases,
|
||||||
AesCtrEncryptorSubsampleTest,
|
AesCtrEncryptorSubsampleTest,
|
||||||
::testing::ValuesIn(kSubsampleTestCases));
|
::testing::ValuesIn(kSubsampleTestCases));
|
||||||
|
|
||||||
|
struct IvTestCase {
|
||||||
|
const uint8_t* iv_test;
|
||||||
|
uint32_t iv_size;
|
||||||
|
const uint8_t* iv_expected;
|
||||||
|
};
|
||||||
|
|
||||||
class AesCtrEncryptorIvTest : public ::testing::TestWithParam<IvTestCase> {};
|
class AesCtrEncryptorIvTest : public ::testing::TestWithParam<IvTestCase> {};
|
||||||
|
|
||||||
TEST_P(AesCtrEncryptorIvTest, IvTest) {
|
TEST_P(AesCtrEncryptorIvTest, IvTest) {
|
||||||
|
@ -305,6 +293,22 @@ TEST_P(AesCtrEncryptorIvTest, IvTest) {
|
||||||
EXPECT_EQ(iv_expected, encryptor.iv());
|
EXPECT_EQ(iv_expected, encryptor.iv());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
// As recommended in ISO/IEC FDIS 23001-7: CENC spec,
|
||||||
|
// For 64-bit (8-byte) IV_Sizes, initialization vectors for subsequent samples
|
||||||
|
// can be created by incrementing the initialization vector of the previous
|
||||||
|
// sample. For 128-bit (16-byte) IV_Sizes, initialization vectors for subsequent
|
||||||
|
// samples should be created by adding the block count of the previous sample to
|
||||||
|
// the initialization vector of the previous sample.
|
||||||
|
const IvTestCase kIvTestCases[] = {
|
||||||
|
{kIv128Zero, arraysize(kIv128Zero), kIv128Four},
|
||||||
|
{kIv128Max64, arraysize(kIv128Max64), kIv128OneAndThree},
|
||||||
|
{kIv128MaxMinusOne, arraysize(kIv128MaxMinusOne), kIv128Two},
|
||||||
|
{kIv64Zero, arraysize(kIv64Zero), kIv64One},
|
||||||
|
{kIv64MaxMinusOne, arraysize(kIv64MaxMinusOne), kIv64Max},
|
||||||
|
{kIv64Max, arraysize(kIv64Max), kIv64Zero}};
|
||||||
|
} // namespace
|
||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(IvTestCases,
|
INSTANTIATE_TEST_CASE_P(IvTestCases,
|
||||||
AesCtrEncryptorIvTest,
|
AesCtrEncryptorIvTest,
|
||||||
::testing::ValuesIn(kIvTestCases));
|
::testing::ValuesIn(kIvTestCases));
|
||||||
|
|
|
@ -60,13 +60,44 @@ TEST_F(AesPatternCryptorTest, InitializeWithIv) {
|
||||||
EXPECT_EQ(iv, pattern_cryptor_.iv());
|
EXPECT_EQ(iv, pattern_cryptor_.iv());
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
struct PatternTestCase {
|
struct PatternTestCase {
|
||||||
const char* text_hex;
|
const char* text_hex;
|
||||||
const char* expected_crypt_text_hex;
|
const char* expected_crypt_text_hex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AesPatternCryptorVerificationTest
|
||||||
|
: public AesPatternCryptorTest,
|
||||||
|
public ::testing::WithParamInterface<PatternTestCase> {};
|
||||||
|
|
||||||
|
TEST_P(AesPatternCryptorVerificationTest, PatternTest) {
|
||||||
|
std::vector<uint8_t> text;
|
||||||
|
std::string text_hex(GetParam().text_hex);
|
||||||
|
if (!text_hex.empty()) {
|
||||||
|
ASSERT_TRUE(base::HexStringToBytes(text_hex, &text));
|
||||||
|
}
|
||||||
|
std::vector<uint8_t> expected_crypt_text;
|
||||||
|
std::string expected_crypt_text_hex(GetParam().expected_crypt_text_hex);
|
||||||
|
if (!expected_crypt_text_hex.empty()) {
|
||||||
|
ASSERT_TRUE(
|
||||||
|
base::HexStringToBytes(expected_crypt_text_hex, &expected_crypt_text));
|
||||||
|
}
|
||||||
|
|
||||||
|
ON_CALL(*mock_cryptor_, CryptInternal(_, _, _, _))
|
||||||
|
.WillByDefault(Invoke([](const uint8_t* text, size_t text_size,
|
||||||
|
uint8_t* crypt_text, size_t* crypt_text_size) {
|
||||||
|
*crypt_text_size = text_size;
|
||||||
|
for (size_t i = 0; i < text_size; ++i) {
|
||||||
|
*crypt_text++ = *text++ + 0x10;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}));
|
||||||
|
|
||||||
|
std::vector<uint8_t> crypt_text;
|
||||||
|
ASSERT_TRUE(pattern_cryptor_.Crypt(text, &crypt_text));
|
||||||
|
EXPECT_EQ(expected_crypt_text, crypt_text);
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
const PatternTestCase kPatternTestCases[] = {
|
const PatternTestCase kPatternTestCases[] = {
|
||||||
// Empty.
|
// Empty.
|
||||||
{"", ""},
|
{"", ""},
|
||||||
|
@ -102,41 +133,8 @@ const PatternTestCase kPatternTestCases[] = {
|
||||||
"81828384858687888990919293949596"
|
"81828384858687888990919293949596"
|
||||||
"97989900010203040506070809101112"},
|
"97989900010203040506070809101112"},
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
class AesPatternCryptorVerificationTest
|
|
||||||
: public AesPatternCryptorTest,
|
|
||||||
public ::testing::WithParamInterface<PatternTestCase> {};
|
|
||||||
|
|
||||||
TEST_P(AesPatternCryptorVerificationTest, PatternTest) {
|
|
||||||
std::vector<uint8_t> text;
|
|
||||||
std::string text_hex(GetParam().text_hex);
|
|
||||||
if (!text_hex.empty()) {
|
|
||||||
ASSERT_TRUE(base::HexStringToBytes(text_hex, &text));
|
|
||||||
}
|
|
||||||
std::vector<uint8_t> expected_crypt_text;
|
|
||||||
std::string expected_crypt_text_hex(GetParam().expected_crypt_text_hex);
|
|
||||||
if (!expected_crypt_text_hex.empty()) {
|
|
||||||
ASSERT_TRUE(
|
|
||||||
base::HexStringToBytes(expected_crypt_text_hex, &expected_crypt_text));
|
|
||||||
}
|
|
||||||
|
|
||||||
ON_CALL(*mock_cryptor_, CryptInternal(_, _, _, _))
|
|
||||||
.WillByDefault(Invoke([](const uint8_t* text, size_t text_size,
|
|
||||||
uint8_t* crypt_text, size_t* crypt_text_size) {
|
|
||||||
*crypt_text_size = text_size;
|
|
||||||
for (size_t i = 0; i < text_size; ++i) {
|
|
||||||
*crypt_text++ = *text++ + 0x10;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}));
|
|
||||||
|
|
||||||
std::vector<uint8_t> crypt_text;
|
|
||||||
ASSERT_TRUE(pattern_cryptor_.Crypt(text, &crypt_text));
|
|
||||||
EXPECT_EQ(expected_crypt_text, crypt_text);
|
|
||||||
}
|
|
||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(PatternTestCases,
|
INSTANTIATE_TEST_CASE_P(PatternTestCases,
|
||||||
AesPatternCryptorVerificationTest,
|
AesPatternCryptorVerificationTest,
|
||||||
::testing::ValuesIn(kPatternTestCases));
|
::testing::ValuesIn(kPatternTestCases));
|
||||||
|
|
|
@ -278,13 +278,11 @@ TEST_F(MultiThreadProducerConsumerQueueTest, PeekOnLargePosition) {
|
||||||
queue_.Stop();
|
queue_.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
|
||||||
enum Operation {
|
enum Operation {
|
||||||
kPush,
|
kPush,
|
||||||
kPop,
|
kPop,
|
||||||
kPeek,
|
kPeek,
|
||||||
};
|
};
|
||||||
} // namespace
|
|
||||||
|
|
||||||
class MultiThreadProducerConsumerQueueStopTest
|
class MultiThreadProducerConsumerQueueStopTest
|
||||||
: public ::testing::TestWithParam<Operation> {
|
: public ::testing::TestWithParam<Operation> {
|
||||||
|
|
|
@ -988,7 +988,7 @@ H264Parser::Result H264Parser::ParseSliceHeader(const Nalu& nalu,
|
||||||
reader.Initialize(nalu.data() + nalu.header_size(), nalu.payload_size());
|
reader.Initialize(nalu.data() + nalu.header_size(), nalu.payload_size());
|
||||||
H26xBitReader* br = &reader;
|
H26xBitReader* br = &reader;
|
||||||
|
|
||||||
memset(shdr, 0, sizeof(*shdr));
|
memset(reinterpret_cast<void*>(shdr), 0, sizeof(*shdr));
|
||||||
|
|
||||||
shdr->idr_pic_flag = (nalu.type() == 5);
|
shdr->idr_pic_flag = (nalu.type() == 5);
|
||||||
shdr->nal_ref_idc = nalu.ref_idc();
|
shdr->nal_ref_idc = nalu.ref_idc();
|
||||||
|
@ -1134,7 +1134,7 @@ H264Parser::Result H264Parser::ParseSEI(const Nalu& nalu,
|
||||||
reader.Initialize(nalu.data() + nalu.header_size(), nalu.payload_size());
|
reader.Initialize(nalu.data() + nalu.header_size(), nalu.payload_size());
|
||||||
H26xBitReader* br = &reader;
|
H26xBitReader* br = &reader;
|
||||||
|
|
||||||
memset(sei_msg, 0, sizeof(*sei_msg));
|
memset(reinterpret_cast<void*>(sei_msg), 0, sizeof(*sei_msg));
|
||||||
|
|
||||||
READ_BITS_OR_RETURN(8, &byte);
|
READ_BITS_OR_RETURN(8, &byte);
|
||||||
while (byte == 0xff) {
|
while (byte == 0xff) {
|
||||||
|
|
|
@ -57,13 +57,6 @@ TEST(EncryptionUtilTest, SampleNotEncrypted) {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
struct EncryptionTestCase {
|
|
||||||
const SubsampleEntry* subsamples;
|
|
||||||
size_t num_subsamples;
|
|
||||||
const uint8_t* subsample_partition_data;
|
|
||||||
size_t subsample_partition_data_size;
|
|
||||||
};
|
|
||||||
|
|
||||||
const SubsampleEntry kSubsamples1[] = {
|
const SubsampleEntry kSubsamples1[] = {
|
||||||
SubsampleEntry(0x12, 0x100),
|
SubsampleEntry(0x12, 0x100),
|
||||||
};
|
};
|
||||||
|
@ -94,21 +87,15 @@ const uint8_t kSubsamplePartitionData4[] = {
|
||||||
0x6B, 0x00, 0x09, 0x03, 0x6B, 0x00, 0x09, 0x03, 0x6D,
|
0x6B, 0x00, 0x09, 0x03, 0x6B, 0x00, 0x09, 0x03, 0x6D,
|
||||||
};
|
};
|
||||||
|
|
||||||
EncryptionTestCase kEncryptionTestCases[] = {
|
|
||||||
// Special case with no subsamples.
|
|
||||||
{nullptr, 0, nullptr, 0},
|
|
||||||
{kSubsamples1, arraysize(kSubsamples1), kSubsamplePartitionData1,
|
|
||||||
arraysize(kSubsamplePartitionData1)},
|
|
||||||
{kSubsamples2, arraysize(kSubsamples2), kSubsamplePartitionData2,
|
|
||||||
arraysize(kSubsamplePartitionData2)},
|
|
||||||
{kSubsamples3, arraysize(kSubsamples3), kSubsamplePartitionData3,
|
|
||||||
arraysize(kSubsamplePartitionData3)},
|
|
||||||
{kSubsamples4, arraysize(kSubsamples4), kSubsamplePartitionData4,
|
|
||||||
arraysize(kSubsamplePartitionData4)},
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
struct EncryptionTestCase {
|
||||||
|
const SubsampleEntry* subsamples;
|
||||||
|
size_t num_subsamples;
|
||||||
|
const uint8_t* subsample_partition_data;
|
||||||
|
size_t subsample_partition_data_size;
|
||||||
|
};
|
||||||
|
|
||||||
class EncryptionUtilEncryptedTest
|
class EncryptionUtilEncryptedTest
|
||||||
: public ::testing::TestWithParam<EncryptionTestCase> {};
|
: public ::testing::TestWithParam<EncryptionTestCase> {};
|
||||||
|
|
||||||
|
@ -148,6 +135,21 @@ TEST_P(EncryptionUtilEncryptedTest, SampleEncrypted) {
|
||||||
sample->data() + sample->data_size()));
|
sample->data() + sample->data_size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
EncryptionTestCase kEncryptionTestCases[] = {
|
||||||
|
// Special case with no subsamples.
|
||||||
|
{nullptr, 0, nullptr, 0},
|
||||||
|
{kSubsamples1, arraysize(kSubsamples1), kSubsamplePartitionData1,
|
||||||
|
arraysize(kSubsamplePartitionData1)},
|
||||||
|
{kSubsamples2, arraysize(kSubsamples2), kSubsamplePartitionData2,
|
||||||
|
arraysize(kSubsamplePartitionData2)},
|
||||||
|
{kSubsamples3, arraysize(kSubsamples3), kSubsamplePartitionData3,
|
||||||
|
arraysize(kSubsamplePartitionData3)},
|
||||||
|
{kSubsamples4, arraysize(kSubsamples4), kSubsamplePartitionData4,
|
||||||
|
arraysize(kSubsamplePartitionData4)},
|
||||||
|
};
|
||||||
|
} // namespace
|
||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(Encryption,
|
INSTANTIATE_TEST_CASE_P(Encryption,
|
||||||
EncryptionUtilEncryptedTest,
|
EncryptionUtilEncryptedTest,
|
||||||
testing::ValuesIn(kEncryptionTestCases));
|
testing::ValuesIn(kEncryptionTestCases));
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
FROM alpine:3.8
|
||||||
|
|
||||||
|
# Install packages needed for Shaka Packager.
|
||||||
|
RUN apk add --no-cache bash build-base curl findutils git ninja python \
|
||||||
|
bsd-compat-headers linux-headers libexecinfo-dev
|
||||||
|
|
||||||
|
# Install depot_tools.
|
||||||
|
WORKDIR /
|
||||||
|
RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||||
|
ENV PATH $PATH:/depot_tools
|
||||||
|
|
||||||
|
# Alpine uses musl which does not have mallinfo defined in malloc.h. Define the
|
||||||
|
# structure to workaround a Chromium base bug.
|
||||||
|
RUN sed -i \
|
||||||
|
'/malloc_usable_size/a \\nstruct mallinfo {\n int arena;\n int hblkhd;\n int uordblks;\n};' \
|
||||||
|
/usr/include/malloc.h
|
||||||
|
|
||||||
|
ENV GYP_DEFINES='linux_use_bundled_binutils=0 linux_use_bundled_gold=0 clang=0 use_experimental_allocator_shim=0 use_allocator=none musl=1'
|
||||||
|
|
||||||
|
# Build and run this docker by mapping shaka-packager with
|
||||||
|
# -v "shaka-packager:/shaka-packager".
|
|
@ -1,27 +1,18 @@
|
||||||
FROM pritunl/archlinux
|
FROM pritunl/archlinux:2018-08-11
|
||||||
|
|
||||||
# Update, and install basic packages.
|
# Update, and install basic packages.
|
||||||
RUN pacman -S --needed --noconfirm python2 git curl gcc gcc-libs make fakeroot
|
RUN pacman -S --needed --noconfirm python2 git curl gcc gcc-libs make
|
||||||
|
|
||||||
# depot_tools uses python2 instead of python3.
|
# depot_tools uses python2 instead of python3.
|
||||||
RUN ln -sf python2 /usr/bin/python
|
RUN ln -sf python2 /usr/bin/python
|
||||||
|
|
||||||
# Install libtinfo.so.5 which is needed by clang.
|
|
||||||
RUN git clone https://aur.archlinux.org/ncurses5-compat-libs.git /tmp/ncurses-libs
|
|
||||||
# makepkg need to run from non root user.
|
|
||||||
RUN useradd -m makepkg_user
|
|
||||||
RUN chown makepkg_user /tmp/ncurses-libs
|
|
||||||
USER makepkg_user
|
|
||||||
WORKDIR /tmp/ncurses-libs
|
|
||||||
RUN gpg --keyserver pgp.mit.edu --recv-keys F7E48EDB
|
|
||||||
RUN makepkg
|
|
||||||
USER root
|
|
||||||
RUN pacman -U --noconfirm /tmp/ncurses-libs/ncurses5-compat-libs-6.0+20170527-1-x86_64.pkg.tar.xz
|
|
||||||
|
|
||||||
# Install depot_tools.
|
# Install depot_tools.
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||||
ENV PATH /depot_tools:$PATH
|
ENV PATH /depot_tools:$PATH
|
||||||
|
|
||||||
|
# Clang needs libtinfo.so.5 which is not available on ArchLinux.
|
||||||
|
ENV GYP_DEFINES='clang=0'
|
||||||
|
|
||||||
# Build and run this docker by mapping shaka-packager with
|
# Build and run this docker by mapping shaka-packager with
|
||||||
# -v "shaka-packager:/shaka-packager".
|
# -v "shaka-packager:/shaka-packager".
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
FROM centos
|
FROM centos:7.5.1804
|
||||||
|
|
||||||
# Update, and install basic packages.
|
# Update, and install basic packages.
|
||||||
RUN yum install -y git python git curl gcc-c++ findutils bzip2 \
|
RUN yum install -y git python git curl gcc-c++ findutils bzip2 \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
FROM debian
|
FROM debian:9.5
|
||||||
|
|
||||||
# Update, and install basic packages
|
# Update, and install basic packages
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
FROM fedora
|
FROM fedora:28
|
||||||
|
|
||||||
# Update, and install basic packages.
|
# Update, and install basic packages.
|
||||||
RUN yum install -y git python git curl gcc-c++ findutils bzip2 \
|
RUN yum install -y git python git curl gcc-c++ findutils bzip2 \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
FROM opensuse
|
FROM opensuse:42.3
|
||||||
|
|
||||||
# Update, and install basic packages.
|
# Update, and install basic packages.
|
||||||
RUN zypper in -y git python python-xml git curl gcc-c++ tar
|
RUN zypper in -y git python python-xml git curl gcc-c++ tar
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
FROM ubuntu:17.10
|
|
||||||
|
|
||||||
# Update, and install basic packages.
|
|
||||||
RUN apt-get update
|
|
||||||
RUN apt-get install -y build-essential curl git python
|
|
||||||
|
|
||||||
# Install depot_tools.
|
|
||||||
RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
|
||||||
ENV PATH /depot_tools:$PATH
|
|
||||||
|
|
||||||
# Build and run this docker by mapping shaka-packager with
|
|
||||||
# -v "shaka-packager:/shaka-packager".
|
|
|
@ -1,4 +1,4 @@
|
||||||
FROM ubuntu
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
# Update, and install basic packages.
|
# Update, and install basic packages.
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
|
|
|
@ -13,6 +13,4 @@ for docker_file in ${SCRIPT_DIR}/*_Dockerfile ; do
|
||||||
docker build -t my_container -f ${docker_file} ${SCRIPT_DIR}
|
docker build -t my_container -f ${docker_file} ${SCRIPT_DIR}
|
||||||
docker_run gclient runhooks
|
docker_run gclient runhooks
|
||||||
docker_run ninja -C out/Release
|
docker_run ninja -C out/Release
|
||||||
docker_run bash -c 'GYP_DEFINES="clang=0" gclient runhooks'
|
|
||||||
docker_run ninja -C out/Release
|
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in New Issue