78003f29300c3ef5c41d278b928df96761676fb7
[oweals/dinit.git] / src / tests / cptests / fuzz.cc
1 #include <cassert>
2 #include <iostream>
3 #include <vector>
4 #include <string>
5 #include <set>
6
7 #include "dinit.h"
8 #include "service.h"
9 #include "baseproc-sys.h"
10 #include "control.h"
11
12 // Control protocol fuzzing.
13
14
15 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
16 {
17         if (Size == 0) return 0;
18
19         service_set sset;
20
21         service_record *s1 = new service_record(&sset, "test-service-1", service_type_t::INTERNAL, {});
22         sset.add_service(s1);
23         service_record *s2 = new service_record(&sset, "test-service-2", service_type_t::INTERNAL, {});
24         sset.add_service(s2);
25         service_record *s3 = new service_record(&sset, "test-service-3", service_type_t::INTERNAL, {});
26         sset.add_service(s3);
27
28         int fd = bp_sys::allocfd();
29         auto *cc = new control_conn_t(event_loop, &sset, fd);
30
31         std::vector<char> input_data(Data, Data + Size);
32         bp_sys::supply_read_data(fd, std::move(input_data));
33
34         event_loop.regd_bidi_watchers[fd]->read_ready(event_loop, fd);
35
36         // Write will process immediately, so there's no need for this:
37         //event_loop.regd_bidi_watchers[fd]->write_ready(event_loop, fd);
38
39         delete cc;
40
41         return 0;
42 }