annotate mp4_start_key_frame.t @ 1851:0351dee227a8

Tests: unbreak tests with dynamic certificates on stable. In 74cffa9d4c43, ticket based session reuse is enabled in addition to using a shared SSL session cache. This changed how a session can be resumed in a different server: - for a session ID based resumption, it is resumed in the same context - when using session tickets, a key name is also checked for matching - with a ticket callback, this is skipped in favor of callback's logic This makes 'session id context match' tests fail with session tickets on stable since ticket key names are unique in distinct SSL contexts. On the other hand, tests pass on 1.23.2+ due to automatic ticket keys rotation that installs ticket callback, and using a common shared SSL session cache.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 28 Mar 2023 01:36:32 +0400
parents be8d5213d6b9
children 2a0a6035a1af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1746
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for the mp4_start_key_frame directive.
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx qw/ :DEFAULT http_content /;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 ###############################################################################
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http mp4/)->has_daemon('ffprobe')
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 ->has_daemon('ffmpeg')
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 daemon off;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 events {
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 }
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 http {
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 server {
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 listen 127.0.0.1:8080;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server_name localhost;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 location / {
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 mp4;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 }
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 location /force/ {
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 mp4;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 mp4_start_key_frame on;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 alias %%TESTDIR%%/;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 }
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 }
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 }
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 EOF
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 plan(skip_all => 'no lavfi')
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 unless grep /lavfi/, `ffmpeg -loglevel quiet -formats`;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 system('ffmpeg -nostdin -loglevel quiet -y '
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 . '-f lavfi -i testsrc=duration=10:size=320x200:rate=15 '
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 . '-pix_fmt yuv420p -g 15 -c:v libx264 '
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 . "${\($t->testdir())}/test.mp4") == 0
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 or die "Can't create mp4 file: $!";
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 $t->try_run('no mp4_start_key_frame')->plan(4);
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 ###############################################################################
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 # baseline durations
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 my $test_uri = '/test.mp4';
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 is(durations($t, 2.0, 4.0), '2.00', 'start at key frame');
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 isnt(durations($t, 2.1, 4.0), '1.90', 'start off key frame');
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 # with forced start at key frame
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 $test_uri = '/force/test.mp4';
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 is(durations($t, 2.0, 4.0), '2.00', 'start at key frame force');
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 is(durations($t, 2.1, 4.0), '1.90', 'start off key frame force');
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 ###############################################################################
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 sub durations {
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 my ($t, $start, $end) = @_;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 my $path = $t->{_testdir} . '/frag.mp4';
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 my $uri = $test_uri;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 if (defined $start) {
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 $uri .= "?start=$start";
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 if (defined $end) {
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 $uri .= "&end=$end";
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 }
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 } elsif (defined $end) {
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 $uri .= "?end=$end";
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 }
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 $t->write_file('frag.mp4', http_content(http_get($uri)));
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 my $r = `ffprobe -show_streams $path 2>/dev/null`;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 Test::Nginx::log_core('||', $r);
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 sprintf "%.2f", $r =~ /duration=(\d+\.\d+)/g;
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 }
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103
be8d5213d6b9 Tests: mp4_start_key_frame tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 ###############################################################################