|
|
|
//
|
|
|
|
//
|
|
|
|
// Copyright 2015 gRPC authors.
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
//
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef GRPC_TEST_CORE_UTIL_PORT_H
|
|
|
|
#define GRPC_TEST_CORE_UTIL_PORT_H
|
|
|
|
|
|
|
|
typedef struct grpc_pick_port_functions {
|
|
|
|
int (*pick_unused_port_or_die_fn)(void);
|
|
|
|
void (*recycle_unused_port_fn)(int port);
|
|
|
|
} grpc_pick_port_functions;
|
|
|
|
|
|
|
|
// pick a port number that is currently unused by either tcp or udp. abort
|
|
|
|
// on failure.
|
|
|
|
int grpc_pick_unused_port_or_die(void);
|
|
|
|
|
|
|
|
// Return a port which was previously returned by grpc_pick_unused_port().
|
|
|
|
// Implementations of grpc_pick_unused_port() backed by a portserver may limit
|
|
|
|
// the total number of ports available; this lets a binary return its allocated
|
|
|
|
// ports back to the server if it is going to allocate a large number.
|
|
|
|
void grpc_recycle_unused_port(int port);
|
|
|
|
|
|
|
|
/// Request the family of pick_port functions in \a functions be used.
|
[fuzzing] Implement endpoints for FuzzingEventEngine (#32689)
Implement listeners, connection, endpoints for `FuzzingEventEngine`.
Allows the fuzzer to select write sizes and delays, connection delays,
and port assignments.
I made a few modifications to the test suite to admit this event engine
to pass the client & server tests:
1. the test factories return shared_ptr<> to admit us to return the same
event engine for both the oracle and the implementation - necessary
because FuzzingEventEngine forms a closed world of addresses & ports.
2. removed the WaitForSingleOwner calls - these seem unnecessary, and we
don't ask our users to do this - tested existing linux tests 1000x
across debug, asan, tsan with this change
Additionally, the event engine overrides the global port picker logic so
that port assignments are made by the fuzzer too.
This PR is a step along a longer journey, and has some outstanding
brethren PR's, and some follow-up work:
* #32603 will convert all the core e2e tests into a more malleable form
* we'll then use #32667 to turn all of these into fuzzers
* finally we'll integrate this into that work and turn all core e2e
tests into fuzzers over timer & callback reorderings and io
size/spacings
---------
Co-authored-by: ctiller <ctiller@users.noreply.github.com>
2 years ago
|
|
|
/// Returns the current set so they can be restored later.
|
|
|
|
grpc_pick_port_functions grpc_set_pick_port_functions(
|
|
|
|
grpc_pick_port_functions functions);
|
|
|
|
|
|
|
|
#endif // GRPC_TEST_CORE_UTIL_PORT_H
|