]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | /* |
2 | * This file is open source software, licensed to you under the terms | |
3 | * of the Apache License, Version 2.0 (the "License"). See the NOTICE file | |
4 | * distributed with this work for additional information regarding copyright | |
5 | * ownership. You may not use this file except in compliance with the License. | |
6 | * | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, | |
12 | * software distributed under the License is distributed on an | |
13 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
14 | * KIND, either express or implied. See the License for the | |
15 | * specific language governing permissions and limitations | |
16 | * under the License. | |
17 | */ | |
18 | /* | |
19 | * Copyright (C) 2014 Cloudius Systems, Ltd. | |
20 | */ | |
21 | ||
22 | #include <seastar/core/reactor.hh> | |
f67539c2 | 23 | #include <seastar/core/smp.hh> |
11fdf7f2 TL |
24 | #include <seastar/core/app-template.hh> |
25 | #include <seastar/core/print.hh> | |
26 | ||
27 | using namespace seastar; | |
28 | ||
29 | future<bool> test_smp_call() { | |
30 | return smp::submit_to(1, [] { | |
31 | return make_ready_future<int>(3); | |
32 | }).then([] (int ret) { | |
33 | return make_ready_future<bool>(ret == 3); | |
34 | }); | |
35 | } | |
36 | ||
37 | struct nasty_exception {}; | |
38 | ||
39 | future<bool> test_smp_exception() { | |
40 | fmt::print("1\n"); | |
41 | return smp::submit_to(1, [] { | |
42 | fmt::print("2\n"); | |
43 | auto x = make_exception_future<int>(nasty_exception()); | |
44 | fmt::print("3\n"); | |
45 | return x; | |
46 | }).then_wrapped([] (future<int> result) { | |
47 | fmt::print("4\n"); | |
48 | try { | |
49 | result.get(); | |
50 | return make_ready_future<bool>(false); // expected an exception | |
51 | } catch (nasty_exception&) { | |
52 | // all is well | |
53 | return make_ready_future<bool>(true); | |
54 | } catch (...) { | |
55 | // incorrect exception type | |
56 | return make_ready_future<bool>(false); | |
57 | } | |
58 | }); | |
59 | } | |
60 | ||
61 | int tests, fails; | |
62 | ||
63 | future<> | |
64 | report(sstring msg, future<bool>&& result) { | |
65 | return std::move(result).then([msg] (bool result) { | |
66 | fmt::print("{}: {}\n", (result ? "PASS" : "FAIL"), msg); | |
67 | tests += 1; | |
68 | fails += !result; | |
69 | }); | |
70 | } | |
71 | ||
72 | int main(int ac, char** av) { | |
73 | return app_template().run_deprecated(ac, av, [] { | |
74 | return report("smp call", test_smp_call()).then([] { | |
75 | return report("smp exception", test_smp_exception()); | |
76 | }).then([] { | |
77 | fmt::print("\n{:d} tests / {:d} failures\n", tests, fails); | |
78 | engine().exit(fails ? 1 : 0); | |
79 | }); | |
80 | }); | |
81 | } |