shaka-packager/packager/media/base/muxer_util_unittest.cc

158 lines
5.8 KiB
C++

// Copyright 2014 Google LLC. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
#include <gtest/gtest.h>
#include <packager/media/base/muxer_util.h>
namespace shaka {
namespace media {
TEST(MuxerUtilTest, ValidateSegmentTemplate) {
EXPECT_NE(Status::OK, ValidateSegmentTemplate(""));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Number$"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Time$"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Time$$Time$"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("foo$Time$goo"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Number$_$Number$"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Number$$Bandwidth$"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Time$$Bandwidth$"));
// Bandwidth without Number or Time should not be valid.
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$Bandwidth$"));
// Escape sequence "$$".
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("foo$Time$__$$loo"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("foo$Time$$$"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$$$Time$$$"));
// Missing $Number$ / $Time$.
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$$"));
EXPECT_NE(Status::OK, ValidateSegmentTemplate("foo$$goo"));
// $Number$, $Time$ should not co-exist.
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$Number$$Time$"));
EXPECT_NE(Status::OK, ValidateSegmentTemplate("foo$Number$_$Time$loo"));
// $RepresentationID$ not implemented yet.
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$RepresentationID$__$Time$"));
// Unknown identifier.
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$foo$$Time$"));
}
TEST(MuxerUtilTest, ValidateSegmentTemplateWithFormatTag) {
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Time%01d$"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Time%05d$"));
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$Time%1d$"));
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$Time%$"));
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$Time%01$"));
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$Time%0xd$"));
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$Time%03xd$"));
// $$ should not have any format tag.
EXPECT_NE(Status::OK, ValidateSegmentTemplate("$%01d$$Time$"));
// Format specifier edge cases.
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Time%00d$"));
EXPECT_EQ(Status::OK, ValidateSegmentTemplate("$Time%005d$"));
}
TEST(MuxerUtilTest, GetSegmentName) {
const int64_t kSegmentStartTime = 180180;
const uint32_t kSegmentIndex = 11;
const uint32_t kBandwidth = 1234;
EXPECT_EQ("12", GetSegmentName("$Number$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
EXPECT_EQ("012",
GetSegmentName("$Number%03d$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
EXPECT_EQ(
"12$foo$00012",
GetSegmentName(
"$Number%01d$$$foo$$$Number%05d$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
EXPECT_EQ("180180",
GetSegmentName("$Time$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
EXPECT_EQ("foo$_$18018000180180.m4s",
GetSegmentName("foo$$_$$$Time%01d$$Time%08d$.m4s",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
// Combo values.
EXPECT_EQ("12-1234",
GetSegmentName("$Number$-$Bandwidth$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
EXPECT_EQ("012-001234",
GetSegmentName("$Number%03d$-$Bandwidth%06d$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
// Format specifier edge cases.
EXPECT_EQ("12",
GetSegmentName("$Number%00d$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
EXPECT_EQ("00012",
GetSegmentName("$Number%005d$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
}
TEST(MuxerUtilTest, GetSegmentNameWithIndexZero) {
const int64_t kSegmentStartTime = 0;
const uint32_t kSegmentIndex = 0;
const uint32_t kBandwidth = 0;
EXPECT_EQ("1", GetSegmentName("$Number$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
EXPECT_EQ("001",
GetSegmentName("$Number%03d$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
EXPECT_EQ("0", GetSegmentName("$Time$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
EXPECT_EQ("00000000.m4s",
GetSegmentName("$Time%08d$.m4s",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
}
TEST(MuxerUtilTest, GetSegmentNameLargeTime) {
const int64_t kSegmentStartTime = 1601599839840ULL;
const uint32_t kSegmentIndex = 8888888;
const uint32_t kBandwidth = 444444;
EXPECT_EQ("1601599839840",
GetSegmentName("$Time$",
kSegmentStartTime,
kSegmentIndex,
kBandwidth));
}
} // namespace media
} // namespace shaka