]> git.proxmox.com Git - ceph.git/blob - ceph/src/seastar/tests/unit/sharded_test.cc
import 15.2.0 Octopus source
[ceph.git] / ceph / src / seastar / tests / unit / sharded_test.cc
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) 2018 Scylladb, Ltd.
20 */
21
22 #include <seastar/testing/thread_test_case.hh>
23
24 #include <seastar/core/sharded.hh>
25
26 using namespace seastar;
27
28 namespace {
29 class invoke_on_during_stop final : public peering_sharded_service<invoke_on_during_stop> {
30 bool flag = false;
31
32 public:
33 future<> stop() {
34 return container().invoke_on(0, [] (invoke_on_during_stop& instance) {
35 instance.flag = true;
36 });
37 }
38
39 ~invoke_on_during_stop() {
40 if (engine().cpu_id() == 0) {
41 assert(flag);
42 }
43 }
44 };
45 }
46
47 SEASTAR_THREAD_TEST_CASE(invoke_on_during_stop_test) {
48 sharded<invoke_on_during_stop> s;
49 s.start().get();
50 s.stop().get();
51 }
52
53 class mydata {
54 public:
55 int x = 1;
56 future<> stop() {
57 return make_ready_future<>();
58 }
59 };
60
61 SEASTAR_THREAD_TEST_CASE(invoke_map_returns_non_future_value) {
62 seastar::sharded<mydata> s;
63 s.start().get();
64 s.map([] (mydata& m) {
65 return m.x;
66 }).then([] (std::vector<int> results) {
67 for (auto& x : results) {
68 assert(x == 1);
69 }
70 }).get();
71 s.stop().get();
72 };
73
74 SEASTAR_THREAD_TEST_CASE(invoke_map_returns_future_value) {
75 seastar::sharded<mydata> s;
76 s.start().get();
77 s.map([] (mydata& m) {
78 return make_ready_future<int>(m.x);
79 }).then([] (std::vector<int> results) {
80 for (auto& x : results) {
81 assert(x == 1);
82 }
83 }).get();
84 s.stop().get();
85 }
86
87 SEASTAR_THREAD_TEST_CASE(invoke_map_returns_future_value_from_thread) {
88 seastar::sharded<mydata> s;
89 s.start().get();
90 s.map([] (mydata& m) {
91 return seastar::async([&m] {
92 return m.x;
93 });
94 }).then([] (std::vector<int> results) {
95 for (auto& x : results) {
96 assert(x == 1);
97 }
98 }).get();
99 s.stop().get();
100 }