mirror of https://github.com/grpc/grpc.git
commit
5d8310e104
27 changed files with 7686 additions and 68 deletions
@ -0,0 +1,2 @@ |
|||||||
|
<%namespace file="Doxyfile.include" import="gen_doxyfile"/>\ |
||||||
|
${gen_doxyfile(['grpc++'], 'C++', libs)} |
@ -0,0 +1,2 @@ |
|||||||
|
<%namespace file="Doxyfile.include" import="gen_doxyfile"/>\ |
||||||
|
${gen_doxyfile(['grpc', 'gpr'], 'Core', libs)} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,136 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2015, Google Inc. |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* Redistribution and use in source and binary forms, with or without |
||||||
|
* modification, are permitted provided that the following conditions are |
||||||
|
* met: |
||||||
|
* |
||||||
|
* * Redistributions of source code must retain the above copyright |
||||||
|
* notice, this list of conditions and the following disclaimer. |
||||||
|
* * Redistributions in binary form must reproduce the above |
||||||
|
* copyright notice, this list of conditions and the following disclaimer |
||||||
|
* in the documentation and/or other materials provided with the |
||||||
|
* distribution. |
||||||
|
* * Neither the name of Google Inc. nor the names of its |
||||||
|
* contributors may be used to endorse or promote products derived from |
||||||
|
* this software without specific prior written permission. |
||||||
|
* |
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "test/core/bad_client/bad_client.h" |
||||||
|
|
||||||
|
#include "src/core/channel/channel_stack.h" |
||||||
|
#include "src/core/channel/http_server_filter.h" |
||||||
|
#include "src/core/iomgr/endpoint_pair.h" |
||||||
|
#include "src/core/surface/completion_queue.h" |
||||||
|
#include "src/core/surface/server.h" |
||||||
|
#include "src/core/transport/chttp2_transport.h" |
||||||
|
|
||||||
|
#include <grpc/support/sync.h> |
||||||
|
#include <grpc/support/thd.h> |
||||||
|
|
||||||
|
typedef struct { |
||||||
|
grpc_server *server; |
||||||
|
grpc_completion_queue *cq; |
||||||
|
grpc_bad_client_server_side_validator validator; |
||||||
|
gpr_event done_thd; |
||||||
|
gpr_event done_write; |
||||||
|
} thd_args; |
||||||
|
|
||||||
|
static void thd_func(void *arg) { |
||||||
|
thd_args *a = arg; |
||||||
|
a->validator(a->server, a->cq); |
||||||
|
gpr_event_set(&a->done_thd, (void *)1); |
||||||
|
} |
||||||
|
|
||||||
|
static void done_write(void *arg, grpc_endpoint_cb_status status) { |
||||||
|
thd_args *a = arg; |
||||||
|
gpr_event_set(&a->done_write, (void *)1); |
||||||
|
} |
||||||
|
|
||||||
|
static grpc_transport_setup_result server_setup_transport( |
||||||
|
void *ts, grpc_transport *transport, grpc_mdctx *mdctx) { |
||||||
|
thd_args *a = ts; |
||||||
|
static grpc_channel_filter const *extra_filters[] = { |
||||||
|
&grpc_http_server_filter}; |
||||||
|
return grpc_server_setup_transport(a->server, transport, extra_filters, |
||||||
|
GPR_ARRAY_SIZE(extra_filters), mdctx); |
||||||
|
} |
||||||
|
|
||||||
|
void grpc_run_bad_client_test(const char *name, const char *client_payload, |
||||||
|
size_t client_payload_length, |
||||||
|
grpc_bad_client_server_side_validator validator) { |
||||||
|
grpc_endpoint_pair sfd; |
||||||
|
thd_args a; |
||||||
|
gpr_thd_id id; |
||||||
|
gpr_slice slice = |
||||||
|
gpr_slice_from_copied_buffer(client_payload, client_payload_length); |
||||||
|
|
||||||
|
/* Add a debug log */ |
||||||
|
gpr_log(GPR_INFO, "TEST: %s", name); |
||||||
|
|
||||||
|
/* Init grpc */ |
||||||
|
grpc_init(); |
||||||
|
|
||||||
|
/* Create endpoints */ |
||||||
|
sfd = grpc_iomgr_create_endpoint_pair(65536); |
||||||
|
|
||||||
|
/* Create server, completion events */ |
||||||
|
a.server = grpc_server_create_from_filters(NULL, 0, NULL); |
||||||
|
a.cq = grpc_completion_queue_create(); |
||||||
|
gpr_event_init(&a.done_thd); |
||||||
|
gpr_event_init(&a.done_write); |
||||||
|
a.validator = validator; |
||||||
|
grpc_server_register_completion_queue(a.server, a.cq); |
||||||
|
grpc_server_start(a.server); |
||||||
|
grpc_create_chttp2_transport(server_setup_transport, &a, NULL, sfd.server, |
||||||
|
NULL, 0, grpc_mdctx_create(), 0); |
||||||
|
|
||||||
|
/* Bind everything into the same pollset */ |
||||||
|
grpc_endpoint_add_to_pollset(sfd.client, grpc_cq_pollset(a.cq)); |
||||||
|
grpc_endpoint_add_to_pollset(sfd.server, grpc_cq_pollset(a.cq)); |
||||||
|
|
||||||
|
/* Check a ground truth */ |
||||||
|
GPR_ASSERT(grpc_server_has_open_connections(a.server)); |
||||||
|
|
||||||
|
/* Start validator */ |
||||||
|
gpr_thd_new(&id, thd_func, &a, NULL); |
||||||
|
|
||||||
|
/* Write data */ |
||||||
|
switch (grpc_endpoint_write(sfd.client, &slice, 1, done_write, &a)) { |
||||||
|
case GRPC_ENDPOINT_WRITE_DONE: |
||||||
|
done_write(&a, 1); |
||||||
|
break; |
||||||
|
case GRPC_ENDPOINT_WRITE_PENDING: |
||||||
|
break; |
||||||
|
case GRPC_ENDPOINT_WRITE_ERROR: |
||||||
|
done_write(&a, 0); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
/* Await completion */ |
||||||
|
GPR_ASSERT( |
||||||
|
gpr_event_wait(&a.done_write, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5))); |
||||||
|
GPR_ASSERT(gpr_event_wait(&a.done_thd, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5))); |
||||||
|
|
||||||
|
/* Shutdown */ |
||||||
|
grpc_endpoint_destroy(sfd.client); |
||||||
|
grpc_server_destroy(a.server); |
||||||
|
grpc_completion_queue_destroy(a.cq); |
||||||
|
|
||||||
|
grpc_shutdown(); |
||||||
|
} |
@ -0,0 +1,52 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2015, Google Inc. |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* Redistribution and use in source and binary forms, with or without |
||||||
|
* modification, are permitted provided that the following conditions are |
||||||
|
* met: |
||||||
|
* |
||||||
|
* * Redistributions of source code must retain the above copyright |
||||||
|
* notice, this list of conditions and the following disclaimer. |
||||||
|
* * Redistributions in binary form must reproduce the above |
||||||
|
* copyright notice, this list of conditions and the following disclaimer |
||||||
|
* in the documentation and/or other materials provided with the |
||||||
|
* distribution. |
||||||
|
* * Neither the name of Google Inc. nor the names of its |
||||||
|
* contributors may be used to endorse or promote products derived from |
||||||
|
* this software without specific prior written permission. |
||||||
|
* |
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef GRPC_TEST_CORE_BAD_CLIENT_BAD_CLIENT_H |
||||||
|
#define GRPC_TEST_CORE_BAD_CLIENT_BAD_CLIENT_H |
||||||
|
|
||||||
|
#include <grpc/grpc.h> |
||||||
|
#include "test/core/util/test_config.h" |
||||||
|
|
||||||
|
typedef void (*grpc_bad_client_server_side_validator)( |
||||||
|
grpc_server *server, grpc_completion_queue *cq); |
||||||
|
|
||||||
|
/* Test runner.
|
||||||
|
|
||||||
|
Create a server, and send client_payload to it as bytes from a client. |
||||||
|
Execute validator in a separate thread to assert that the bytes are |
||||||
|
handled as expected. */ |
||||||
|
void grpc_run_bad_client_test(const char *name, const char *client_payload, |
||||||
|
size_t client_payload_length, |
||||||
|
grpc_bad_client_server_side_validator validator); |
||||||
|
|
||||||
|
#endif /* GRPC_TEST_CORE_BAD_CLIENT_BAD_CLIENT_H */ |
@ -0,0 +1,79 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# Copyright 2015, Google Inc. |
||||||
|
# All rights reserved. |
||||||
|
# |
||||||
|
# Redistribution and use in source and binary forms, with or without |
||||||
|
# modification, are permitted provided that the following conditions are |
||||||
|
# met: |
||||||
|
# |
||||||
|
# * Redistributions of source code must retain the above copyright |
||||||
|
# notice, this list of conditions and the following disclaimer. |
||||||
|
# * Redistributions in binary form must reproduce the above |
||||||
|
# copyright notice, this list of conditions and the following disclaimer |
||||||
|
# in the documentation and/or other materials provided with the |
||||||
|
# distribution. |
||||||
|
# * Neither the name of Google Inc. nor the names of its |
||||||
|
# contributors may be used to endorse or promote products derived from |
||||||
|
# this software without specific prior written permission. |
||||||
|
# |
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||||
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||||
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||||
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||||
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||||
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
|
||||||
|
|
||||||
|
"""Generates the appropriate build.json data for all the end2end tests.""" |
||||||
|
|
||||||
|
|
||||||
|
import simplejson |
||||||
|
import collections |
||||||
|
|
||||||
|
TestOptions = collections.namedtuple('TestOptions', 'flaky') |
||||||
|
default_test_options = TestOptions(False) |
||||||
|
|
||||||
|
# maps test names to options |
||||||
|
BAD_CLIENT_TESTS = { |
||||||
|
'connection_prefix': default_test_options, |
||||||
|
} |
||||||
|
|
||||||
|
def main(): |
||||||
|
json = { |
||||||
|
'#': 'generated with test/bad_client/gen_build_json.py', |
||||||
|
'libs': [ |
||||||
|
{ |
||||||
|
'name': 'bad_client_test', |
||||||
|
'build': 'private', |
||||||
|
'language': 'c', |
||||||
|
'src': [ |
||||||
|
'test/core/bad_client/bad_client.c' |
||||||
|
] |
||||||
|
}], |
||||||
|
'targets': [ |
||||||
|
{ |
||||||
|
'name': '%s_bad_client_test' % t, |
||||||
|
'build': 'test', |
||||||
|
'language': 'c', |
||||||
|
'secure': 'no', |
||||||
|
'src': ['test/core/bad_client/tests/%s.c' % t], |
||||||
|
'flaky': 'invoke_large_request' in t, |
||||||
|
'deps': [ |
||||||
|
'bad_client_test', |
||||||
|
'grpc_test_util_unsecure', |
||||||
|
'grpc_unsecure', |
||||||
|
'gpr_test_util', |
||||||
|
'gpr' |
||||||
|
] |
||||||
|
} |
||||||
|
for t in sorted(BAD_CLIENT_TESTS.keys())]} |
||||||
|
print simplejson.dumps(json, sort_keys=True, indent=2 * ' ') |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
main() |
@ -0,0 +1,79 @@ |
|||||||
|
/*
|
||||||
|
* |
||||||
|
* Copyright 2015, Google Inc. |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* Redistribution and use in source and binary forms, with or without |
||||||
|
* modification, are permitted provided that the following conditions are |
||||||
|
* met: |
||||||
|
* |
||||||
|
* * Redistributions of source code must retain the above copyright |
||||||
|
* notice, this list of conditions and the following disclaimer. |
||||||
|
* * Redistributions in binary form must reproduce the above |
||||||
|
* copyright notice, this list of conditions and the following disclaimer |
||||||
|
* in the documentation and/or other materials provided with the |
||||||
|
* distribution. |
||||||
|
* * Neither the name of Google Inc. nor the names of its |
||||||
|
* contributors may be used to endorse or promote products derived from |
||||||
|
* this software without specific prior written permission. |
||||||
|
* |
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "test/core/bad_client/bad_client.h" |
||||||
|
#include "src/core/surface/server.h" |
||||||
|
|
||||||
|
static void verifier(grpc_server *server, grpc_completion_queue *cq) { |
||||||
|
while (grpc_server_has_open_connections(server)) { |
||||||
|
GPR_ASSERT(grpc_completion_queue_next( |
||||||
|
cq, GRPC_TIMEOUT_MILLIS_TO_DEADLINE(20)).type == |
||||||
|
GRPC_QUEUE_TIMEOUT); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char **argv) { |
||||||
|
grpc_test_init(argc, argv); |
||||||
|
|
||||||
|
grpc_run_bad_client_test("conpfx_1", "X", 1, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_2", "PX", 2, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_3", "PRX", 3, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_4", "PRIX", 4, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_5", "PRI X", 5, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_6", "PRI *X", 6, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_7", "PRI * X", 7, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_8", "PRI * HX", 8, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_9", "PRI * HTX", 9, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_10", "PRI * HTTX", 10, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_11", "PRI * HTTPX", 11, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_12", "PRI * HTTP/X", 12, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_13", "PRI * HTTP/2X", 13, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_14", "PRI * HTTP/2.X", 14, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_15", "PRI * HTTP/2.0X", 15, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_16", "PRI * HTTP/2.0\rX", 16, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_17", "PRI * HTTP/2.0\r\nX", 17, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_18", "PRI * HTTP/2.0\r\n\rX", 18, verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_19", "PRI * HTTP/2.0\r\n\r\nX", 19, |
||||||
|
verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_20", "PRI * HTTP/2.0\r\n\r\nSX", 20, |
||||||
|
verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_21", "PRI * HTTP/2.0\r\n\r\nSMX", 21, |
||||||
|
verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_22", "PRI * HTTP/2.0\r\n\r\nSM\rX", 22, |
||||||
|
verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_23", "PRI * HTTP/2.0\r\n\r\nSM\r\nX", 23, |
||||||
|
verifier); |
||||||
|
grpc_run_bad_client_test("conpfx_24", "PRI * HTTP/2.0\r\n\r\nSM\r\n\rX", 24, |
||||||
|
verifier); |
||||||
|
return 0; |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,41 @@ |
|||||||
|
#!/bin/sh |
||||||
|
|
||||||
|
# Copyright 2015, Google Inc. |
||||||
|
# All rights reserved. |
||||||
|
# |
||||||
|
# Redistribution and use in source and binary forms, with or without |
||||||
|
# modification, are permitted provided that the following conditions are |
||||||
|
# met: |
||||||
|
# |
||||||
|
# * Redistributions of source code must retain the above copyright |
||||||
|
# notice, this list of conditions and the following disclaimer. |
||||||
|
# * Redistributions in binary form must reproduce the above |
||||||
|
# copyright notice, this list of conditions and the following disclaimer |
||||||
|
# in the documentation and/or other materials provided with the |
||||||
|
# distribution. |
||||||
|
# * Neither the name of Google Inc. nor the names of its |
||||||
|
# contributors may be used to endorse or promote products derived from |
||||||
|
# this software without specific prior written permission. |
||||||
|
# |
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||||
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||||
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||||
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||||
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||||
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||||
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||||
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
|
||||||
|
set -ex |
||||||
|
|
||||||
|
# change to grpc repo root |
||||||
|
cd $(dirname $0)/../.. |
||||||
|
|
||||||
|
for i in core c++ |
||||||
|
do |
||||||
|
mkdir -p doc/ref/$i |
||||||
|
doxygen tools/doxygen/Doxyfile.$i |
||||||
|
done |
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue