mirror of https://github.com/grpc/grpc.git
parent
cf4db6d9a7
commit
3bc8ebd48e
24 changed files with 957 additions and 24 deletions
File diff suppressed because one or more lines are too long
@ -0,0 +1,34 @@ |
||||
/*
|
||||
* |
||||
* 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 "src/core/client_config/lb_policies/pick_first.h" |
@ -0,0 +1,42 @@ |
||||
/*
|
||||
* |
||||
* 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_INTERNAL_CORE_CLIENT_CONFIG_PICK_FIRST_H |
||||
#define GRPC_INTERNAL_CORE_CLIENT_CONFIG_PICK_FIRST_H |
||||
|
||||
#include "src/core/client_config/lb_policy.h" |
||||
|
||||
grpc_lb_policy *grpc_create_pick_first_lb_policy(grpc_subchannel **subchannels, |
||||
size_t num_subchannels); |
||||
|
||||
#endif |
@ -0,0 +1,102 @@ |
||||
/*
|
||||
* |
||||
* 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 "src/core/client_config/resolver_registry.h" |
||||
|
||||
#include <string.h> |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/string_util.h> |
||||
|
||||
#define MAX_RESOLVERS 10 |
||||
|
||||
typedef struct { |
||||
char *scheme; |
||||
grpc_resolver_factory *factory; |
||||
} registered_resolver; |
||||
|
||||
static registered_resolver all_of_the_resolvers[MAX_RESOLVERS]; |
||||
static int number_of_resolvers = 0; |
||||
|
||||
void grpc_resolver_registry_init(grpc_resolver_factory *r) { |
||||
number_of_resolvers = 0; |
||||
grpc_register_resolver_type("default-grpc-resolver", r); |
||||
} |
||||
|
||||
void grpc_resolver_registry_shutdown(void) { |
||||
int i; |
||||
for (i = 0; i < number_of_resolvers; i++) { |
||||
gpr_free(all_of_the_resolvers[i].scheme); |
||||
grpc_resolver_factory_unref(all_of_the_resolvers[i].factory); |
||||
} |
||||
} |
||||
|
||||
void grpc_register_resolver_type(const char *scheme, |
||||
grpc_resolver_factory *factory) { |
||||
int i; |
||||
for (i = 0; i < number_of_resolvers; i++) { |
||||
GPR_ASSERT(0 != strcmp(scheme, all_of_the_resolvers[i].scheme)); |
||||
} |
||||
GPR_ASSERT(number_of_resolvers != MAX_RESOLVERS); |
||||
all_of_the_resolvers[number_of_resolvers].scheme = gpr_strdup(scheme); |
||||
grpc_resolver_factory_ref(factory); |
||||
all_of_the_resolvers[number_of_resolvers].factory = factory; |
||||
number_of_resolvers++; |
||||
} |
||||
|
||||
grpc_resolver *grpc_resolver_create( |
||||
const char *name, grpc_subchannel_factory *subchannel_factory) { |
||||
grpc_uri *uri; |
||||
int i; |
||||
char *tmp; |
||||
grpc_resolver *resolver = NULL; |
||||
if (grpc_has_scheme(name)) { |
||||
uri = grpc_uri_parse(name); |
||||
if (!uri) { |
||||
return NULL; |
||||
} |
||||
for (i = 0; i < number_of_resolvers; i++) { |
||||
if (0 == strcmp(all_of_the_resolvers[i].scheme, uri->scheme)) { |
||||
grpc_resolver_factory_create_resolver(all_of_the_resolvers[i].factory, |
||||
uri, subchannel_factory); |
||||
} |
||||
} |
||||
} else { |
||||
gpr_asprintf(&tmp, "default-grpc-resolver:%s", name); |
||||
GPR_ASSERT(grpc_has_scheme(tmp)); |
||||
resolver = grpc_resolver_create(tmp, subchannel_factory); |
||||
gpr_free(tmp); |
||||
} |
||||
return resolver; |
||||
} |
@ -0,0 +1,54 @@ |
||||
/*
|
||||
* |
||||
* 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_INTERNAL_CORE_CLIENT_CONFIG_RESOLVER_REGISTRY_H |
||||
#define GRPC_INTERNAL_CORE_CLIENT_CONFIG_RESOLVER_REGISTRY_H |
||||
|
||||
#include "src/core/client_config/resolver_factory.h" |
||||
|
||||
void grpc_resolver_registry_init(grpc_resolver_factory *default_resolver); |
||||
void grpc_resolver_registry_shutdown(void); |
||||
|
||||
/** Register a resolver type.
|
||||
URI's of \a scheme will be resolved with the given resolver. |
||||
If \a priority is greater than zero, then the resolver will be eligible |
||||
to resolve names that are passed in with no scheme. Higher priority |
||||
resolvers will be tried before lower priority schemes. */ |
||||
void grpc_register_resolver_type(const char *scheme, |
||||
grpc_resolver_factory *factory); |
||||
|
||||
/** Create a resolver given a \a uri string (with an optional scheme prefix) */ |
||||
grpc_resolver *grpc_resolver_create( |
||||
const char *name, grpc_subchannel_factory *subchannel_factory); |
||||
|
||||
#endif /* GRPC_INTERNAL_CORE_CLIENT_CONFIG_RESOLVER_REGISTRY_H */ |
@ -0,0 +1,169 @@ |
||||
/*
|
||||
* |
||||
* 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 "src/core/client_config/uri_parser.h" |
||||
|
||||
#include <string.h> |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/string_util.h> |
||||
|
||||
static grpc_uri *bad_uri(const char *uri_text, int pos, const char *section) { |
||||
char *line_prefix; |
||||
int pfx_len; |
||||
|
||||
gpr_asprintf(&line_prefix, "bad uri.%s: '", section); |
||||
pfx_len = strlen(line_prefix) + pos; |
||||
gpr_log(GPR_ERROR, "%s%s'", line_prefix, uri_text); |
||||
gpr_free(line_prefix); |
||||
|
||||
line_prefix = gpr_malloc(pfx_len + 1); |
||||
memset(line_prefix, ' ', pfx_len); |
||||
line_prefix[pfx_len] = 0; |
||||
gpr_log(GPR_ERROR, "%s^ here", line_prefix); |
||||
gpr_free(line_prefix); |
||||
|
||||
return NULL; |
||||
} |
||||
|
||||
static char *copy_fragment(const char *src, int begin, int end) { |
||||
char *out = gpr_malloc(end - begin + 1); |
||||
memcpy(out, src + begin, end - begin); |
||||
out[end - begin] = 0; |
||||
return out; |
||||
} |
||||
|
||||
int grpc_has_scheme(const char *uri_text) { |
||||
int scheme_begin = 0; |
||||
int scheme_end = -1; |
||||
int i; |
||||
|
||||
for (i = scheme_begin; uri_text[i] != 0; i++) { |
||||
if (uri_text[i] == ':') { |
||||
scheme_end = i; |
||||
break; |
||||
} |
||||
if (uri_text[i] >= 'a' && uri_text[i] <= 'z') continue; |
||||
if (uri_text[i] >= 'A' && uri_text[i] <= 'Z') continue; |
||||
if (i != scheme_begin) { |
||||
if (uri_text[i] >= '0' && uri_text[i] <= '9') continue; |
||||
if (uri_text[i] == '+') continue; |
||||
if (uri_text[i] == '-') continue; |
||||
if (uri_text[i] == '.') continue; |
||||
} |
||||
break; |
||||
} |
||||
|
||||
return scheme_end != -1; |
||||
} |
||||
|
||||
grpc_uri *grpc_uri_parse(const char *uri_text) { |
||||
grpc_uri *uri; |
||||
int scheme_begin = 0; |
||||
int scheme_end = -1; |
||||
int authority_begin = -1; |
||||
int authority_end = -1; |
||||
int path_begin = -1; |
||||
int path_end = -1; |
||||
int i; |
||||
|
||||
for (i = scheme_begin; uri_text[i] != 0; i++) { |
||||
if (uri_text[i] == ':') { |
||||
scheme_end = i; |
||||
break; |
||||
} |
||||
if (uri_text[i] >= 'a' && uri_text[i] <= 'z') continue; |
||||
if (uri_text[i] >= 'A' && uri_text[i] <= 'Z') continue; |
||||
if (i != scheme_begin) { |
||||
if (uri_text[i] >= '0' && uri_text[i] <= '9') continue; |
||||
if (uri_text[i] == '+') continue; |
||||
if (uri_text[i] == '-') continue; |
||||
if (uri_text[i] == '.') continue; |
||||
} |
||||
break; |
||||
} |
||||
if (scheme_end == -1) { |
||||
return bad_uri(uri_text, i, "scheme"); |
||||
} |
||||
|
||||
if (uri_text[scheme_end + 1] == '/' && uri_text[scheme_end + 2] == '/') { |
||||
authority_begin = scheme_end + 3; |
||||
for (i = authority_begin; uri_text[i] != 0; i++) { |
||||
if (uri_text[i] == '/') { |
||||
authority_end = i; |
||||
} |
||||
if (uri_text[i] == '?') { |
||||
return bad_uri(uri_text, i, "query_not_supported"); |
||||
} |
||||
if (uri_text[i] == '#') { |
||||
return bad_uri(uri_text, i, "fragment_not_supported"); |
||||
} |
||||
} |
||||
if (authority_end == -1 && uri_text[i] == 0) { |
||||
authority_end = i; |
||||
} |
||||
if (authority_end == -1) { |
||||
return bad_uri(uri_text, i, "authority"); |
||||
} |
||||
/* TODO(ctiller): parse the authority correctly */ |
||||
path_begin = authority_end; |
||||
} else { |
||||
path_begin = scheme_end + 1; |
||||
} |
||||
|
||||
for (i = path_begin; uri_text[i] != 0; i++) { |
||||
if (uri_text[i] == '?') { |
||||
return bad_uri(uri_text, i, "query_not_supported"); |
||||
} |
||||
if (uri_text[i] == '#') { |
||||
return bad_uri(uri_text, i, "fragment_not_supported"); |
||||
} |
||||
} |
||||
path_end = i; |
||||
|
||||
uri = gpr_malloc(sizeof(*uri)); |
||||
memset(uri, 0, sizeof(*uri)); |
||||
uri->scheme = copy_fragment(uri_text, scheme_begin, scheme_end); |
||||
uri->authority = copy_fragment(uri_text, authority_begin, authority_end); |
||||
uri->path = copy_fragment(uri_text, path_begin, path_end); |
||||
|
||||
return uri; |
||||
} |
||||
|
||||
void grpc_uri_destroy(grpc_uri *uri) { |
||||
gpr_free(uri->scheme); |
||||
gpr_free(uri->authority); |
||||
gpr_free(uri->path); |
||||
gpr_free(uri); |
||||
} |
@ -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_INTERNAL_CORE_CLIENT_CONFIG_URI_PARSER_H |
||||
#define GRPC_INTERNAL_CORE_CLIENT_CONFIG_URI_PARSER_H |
||||
|
||||
typedef struct { |
||||
char *scheme; |
||||
char *authority; |
||||
char *path; |
||||
} grpc_uri; |
||||
|
||||
/** parse a uri, return NULL on failure */ |
||||
grpc_uri *grpc_uri_parse(const char *uri_text); |
||||
|
||||
/** return 1 if uri_text has something that is likely a scheme, 0 otherwise */ |
||||
int grpc_has_scheme(const char *uri_text); |
||||
|
||||
/** destroy a uri */ |
||||
void grpc_uri_destroy(grpc_uri *uri); |
||||
|
||||
#endif |
@ -0,0 +1,68 @@ |
||||
/*
|
||||
* |
||||
* 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 "src/core/client_config/uri_parser.h" |
||||
|
||||
#include <string.h> |
||||
|
||||
#include <grpc/support/log.h> |
||||
|
||||
#include "test/core/util/test_config.h" |
||||
|
||||
static void test_succeeds(const char *uri_text, const char *scheme, |
||||
const char *authority, const char *path) { |
||||
grpc_uri *uri = grpc_uri_parse(uri_text); |
||||
GPR_ASSERT(uri); |
||||
GPR_ASSERT(0 == strcmp(scheme, uri->scheme)); |
||||
GPR_ASSERT(0 == strcmp(authority, uri->authority)); |
||||
GPR_ASSERT(0 == strcmp(path, uri->path)); |
||||
grpc_uri_destroy(uri); |
||||
} |
||||
|
||||
static void test_fails(const char *uri_text) { |
||||
GPR_ASSERT(NULL == grpc_uri_parse(uri_text)); |
||||
} |
||||
|
||||
int main(int argc, char **argv) { |
||||
grpc_test_init(argc, argv); |
||||
test_succeeds("http://www.google.com", "http", "www.google.com", ""); |
||||
test_succeeds("dns:///foo", "dns", "", "/foo"); |
||||
test_succeeds("http://www.google.com:90", "http", "www.google.com:90", ""); |
||||
test_fails("xyz"); |
||||
test_fails("http://www.google.com?why-are-you-using-queries"); |
||||
|
||||
GPR_ASSERT(grpc_has_scheme("http:adfhadf")); |
||||
GPR_ASSERT(grpc_has_scheme("http://adfhadf")); |
||||
GPR_ASSERT(!grpc_has_scheme("adfhadf")); |
||||
return 0; |
||||
} |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue