Mir

Merge lp:~vanvugt/mir/test-without-entropy into lp:mir

Proposed by Daniel van Vugt
Status: Merged
Approved by: Chris Halse Rogers
Approved revision: no longer in the source branch.
Merged at revision: 3340
Proposed branch: lp:~vanvugt/mir/test-without-entropy
Merge into: lp:mir
Diff against target: 86 lines (+52/-0)
2 files modified
tests/acceptance-tests/test_server_startup.cpp (+29/-0)
tests/unit-tests/test_mir_cookie.cpp (+23/-0)
To merge this branch: bzr merge lp:~vanvugt/mir/test-without-entropy
Reviewer Review Type Date Requested Status
Chris Halse Rogers Approve
Mir CI Bot continuous-integration Approve
Kevin DuBois (community) Approve
Cemil Azizoglu (community) Approve
Review via email: mp+287136@code.launchpad.net

Commit message

Add regression tests for the evil /dev/random hangs and crashes
we see when starting a Mir server (LP: #1536662 and LP: #1541188)

Description of the change

It's not a fix but it is a start.

To post a comment you must log in.
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:3342
https://mir-jenkins.ubuntu.com/job/mir-ci/399/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/197
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/215
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/211
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/211
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/202
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/202/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/202
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/202/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/202
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/202/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/202
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/202/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/399/rebuild

review: Approve (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

+TEST(MirCookieAuthority, DISABLED_does_not_hang_or_crash)

Not an informative test name. How about following the BDD "given/when/then" style? Vis:

TEST(MirCookieAuthority, DISABLED_given_low_entropy_when_starting_then_does_not_hang_or_crash)

Revision history for this message
Cemil Azizoglu (cemil-azizoglu) wrote :

Ok

review: Approve
Revision history for this message
Kevin DuBois (kdub) wrote :

assuming there's a good reason they're disabled, lgtm.

review: Approve
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:3344
https://mir-jenkins.ubuntu.com/job/mir-ci/407/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/207
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/231
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/223
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/223
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=vivid+overlay/213
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=vivid+overlay/213/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/213
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/213/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/213
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/213/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/213
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/213/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/213
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/213/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/407/rebuild

review: Approve (continuous-integration)
Revision history for this message
Chris Halse Rogers (raof) wrote :

Seems reasonable.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'tests/acceptance-tests/test_server_startup.cpp'
--- tests/acceptance-tests/test_server_startup.cpp 2015-02-22 07:46:25 +0000
+++ tests/acceptance-tests/test_server_startup.cpp 2016-02-26 03:39:01 +0000
@@ -18,11 +18,13 @@
18 */18 */
1919
20#include "mir_test_framework/interprocess_client_server_test.h"20#include "mir_test_framework/interprocess_client_server_test.h"
21#include "mir_test_framework/headless_in_process_server.h"
21#include "mir_test_framework/detect_server.h"22#include "mir_test_framework/detect_server.h"
2223
23#include <chrono>24#include <chrono>
24#include <gmock/gmock.h>25#include <gmock/gmock.h>
25#include <gtest/gtest.h>26#include <gtest/gtest.h>
27#include <fcntl.h>
2628
27namespace mf = mir::frontend;29namespace mf = mir::frontend;
28namespace mc = mir::compositor;30namespace mc = mir::compositor;
@@ -65,3 +67,30 @@
65 std::chrono::milliseconds(100)));67 std::chrono::milliseconds(100)));
66 });68 });
67}69}
70
71TEST(ServerStartupReliability, DISABLED_can_start_with_low_entropy)
72{ // Regression test for LP: #1536662 and LP: #1541188
73 using namespace ::testing;
74
75 // Flush the entropy pool
76 int fd = open("/dev/random", O_RDONLY | O_NONBLOCK);
77 ASSERT_THAT(fd, Ge(0));
78 char buf[256];
79 while (read(fd, buf, sizeof buf) > 0) {}
80 close(fd);
81
82 auto start = std::chrono::high_resolution_clock::now();
83
84 struct Server : mtf::HeadlessInProcessServer
85 {
86 void TestBody() override {}
87 } server;
88
89 EXPECT_NO_THROW(server.SetUp(););
90
91 auto duration = std::chrono::high_resolution_clock::now() - start;
92 int seconds = std::chrono::duration_cast<std::chrono::seconds>(duration).count();
93 EXPECT_THAT(seconds, Lt(15));
94
95 server.TearDown();
96}
6897
=== modified file 'tests/unit-tests/test_mir_cookie.cpp'
--- tests/unit-tests/test_mir_cookie.cpp 2016-01-29 08:18:22 +0000
+++ tests/unit-tests/test_mir_cookie.cpp 2016-02-26 03:39:01 +0000
@@ -22,6 +22,9 @@
22#include <gtest/gtest.h>22#include <gtest/gtest.h>
23#include <gmock/gmock.h>23#include <gmock/gmock.h>
2424
25#include <chrono>
26#include <fcntl.h>
27
25TEST(MirCookieAuthority, attests_real_timestamp)28TEST(MirCookieAuthority, attests_real_timestamp)
26{29{
27 std::vector<uint8_t> secret{ 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xde, 0x01 };30 std::vector<uint8_t> secret{ 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xde, 0x01 };
@@ -115,3 +118,23 @@
115 EXPECT_THAT(mir::cookie::Authority::optimal_secret_size(),118 EXPECT_THAT(mir::cookie::Authority::optimal_secret_size(),
116 Ge(mir::cookie::Authority::minimum_secret_size));119 Ge(mir::cookie::Authority::minimum_secret_size));
117}120}
121
122TEST(MirCookieAuthority, DISABLED_given_low_entropy_does_not_hang_or_crash)
123{ // Regression test for LP: #1536662 and LP: #1541188
124 using namespace testing;
125
126 // Flush the entropy pool
127 int fd = open("/dev/random", O_RDONLY | O_NONBLOCK);
128 ASSERT_THAT(fd, Ge(0));
129 char buf[256];
130 while (read(fd, buf, sizeof buf) > 0) {}
131 close(fd);
132
133 auto start = std::chrono::high_resolution_clock::now();
134
135 EXPECT_NO_THROW( mir::cookie::Authority::create() );
136
137 auto duration = std::chrono::high_resolution_clock::now() - start;
138 int seconds = std::chrono::duration_cast<std::chrono::seconds>(duration).count();
139 EXPECT_THAT(seconds, Lt(15));
140}

Subscribers

People subscribed via source and target branches