e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens Elkner Jakub Hrozek <jhrozek@redhat.com>
aa0ca44e856c87db27e61687cbb630f270976da1Felix Gabriel Mance Copyright (C) 2014 Red Hat
aa0ca44e856c87db27e61687cbb630f270976da1Felix Gabriel Mance SSSD tests: Resolver tests using a fake resolver library
aa0ca44e856c87db27e61687cbb630f270976da1Felix Gabriel Mance This program is free software; you can redistribute it and/or modify
aa0ca44e856c87db27e61687cbb630f270976da1Felix Gabriel Mance it under the terms of the GNU General Public License as published by
1aba43480a797666f400a595193d95ce08b2a059Felix Gabriel Mance the Free Software Foundation; either version 3 of the License, or
aa64389ee694577d9e665cf57331129000072a79Felix Gabriel Mance (at your option) any later version.
aa0ca44e856c87db27e61687cbb630f270976da1Felix Gabriel Mance This program is distributed in the hope that it will be useful,
ad31b4bf8b1394d8ed091857b0dc1027ed1eaa1eFelix Gabriel Mance but WITHOUT ANY WARRANTY; without even the implied warranty of
ad31b4bf8b1394d8ed091857b0dc1027ed1eaa1eFelix Gabriel Mance MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ad31b4bf8b1394d8ed091857b0dc1027ed1eaa1eFelix Gabriel Mance GNU General Public License for more details.
80875f917d741946a39d0ec0b5721e46ba609823Till Mossakowski You should have received a copy of the GNU General Public License
dc8c83e9922e4746c192916565f3522418534f3aFelix Gabriel Mance along with this program. If not, see <http://www.gnu.org/licenses/>.
fa544036407a8ec4be203ebd5e3bff225175e664Felix Gabriel Mance#define TEST_SRV_QUERY "_ldap._tcp.sssd.com"
a604cbad8e2202147b5c6bb9f2e06ae61162d654Felix Gabriel Mancestatic TALLOC_CTX *global_mock_context = NULL;
1a38107941725211e7c3f051f7a8f5e12199f03acmaederstatic ssize_t dns_header(unsigned char **buf, size_t ancount)
a604cbad8e2202147b5c6bb9f2e06ae61162d654Felix Gabriel Mance memset(&h, 0, sizeof(h));
a604cbad8e2202147b5c6bb9f2e06ae61162d654Felix Gabriel Mance h.id = res_randomid(); /* random query ID */
06ccc384615ae5c183262544959ba2a894a0dc80Felix Gabriel Mance h.qdcount = htons(1); /* no. of questions */
ad31b4bf8b1394d8ed091857b0dc1027ed1eaa1eFelix Gabriel Mance h.arcount = htons(0); /* no. of add'tl records */
0b4abe255a45398b8451bf5df821277c3cbbfc01Felix Gabriel Mance hb += NS_HFIXEDSZ; /* move past the header */
cb1375e6805fbe42b931c54dcc37674193443267Christian Maederstatic ssize_t dns_question(const char *question,
e40758c36e3e5312669558ad189b24b3eaf10c59Mihai Codescu n = ns_name_compress(question, qb, remaining, NULL, NULL);
668c9c725a11c0f77057152148570af853a1bc0dFelix Gabriel Mancestatic ssize_t add_rr_common(uint16_t type,
fa544036407a8ec4be203ebd5e3bff225175e664Felix Gabriel Mance written = ns_name_compress(key, rd, remaining, NULL, NULL);
fa544036407a8ec4be203ebd5e3bff225175e664Felix Gabriel Mance assert_true(remaining > 3 * sizeof(uint16_t) + sizeof(uint32_t));
06ccc384615ae5c183262544959ba2a894a0dc80Felix Gabriel Mance return written + 3 * sizeof(uint16_t) + sizeof(uint32_t) + rdata_size;
81ec673ac5ab1493568d9ef7798b752ab8ee0e61Felix Gabriel Mancestatic ssize_t add_srv_rr(struct srv_rrdata *rr,
f008d37d7fd3b2394a717ac3561f5f1982bb0b28Felix Gabriel Mance unsigned char hostname_compressed[MAXDNAME];
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder /* Prepare the data to write */
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder compressed_len = ns_name_compress(rr->hostname,
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder resp_size = add_rr_common(ns_t_srv, rr->ttl, rdata_size,
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder memcpy(a, hostname_compressed, compressed_len);
47589c2d80dabefc0cd8e2ee5e7331e3db677c68notanartistunsigned char *create_srv_buffer(TALLOC_CTX *mem_ctx,
47589c2d80dabefc0cd8e2ee5e7331e3db677c68notanartist buf = talloc_zero_array(mem_ctx, unsigned char, TEST_BUFSIZE);
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder len = dns_question(question, ns_t_srv, &buf, TEST_BUFSIZE - total);
47589c2d80dabefc0cd8e2ee5e7331e3db677c68notanartist /* answer */
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder for (i = 0; i < n_rrs; i++) {
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder len = add_srv_rr(&rrs[i], question, buf, TEST_BUFSIZE - total);
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maedervoid mock_ares_query(int status, int timeouts, unsigned char *abuf, int alen)
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maedervoid __wrap_ares_query(ares_channel channel, const char *name, int dnsclass,
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder query.abuf = sss_mock_ptr_type(unsigned char *);
47589c2d80dabefc0cd8e2ee5e7331e3db677c68notanartist callback(arg, query.status, query.timeouts, query.abuf, query.alen);
669b3375925f7a145d287fa89f3a815708dbe7a1Christian Maeder/* The unit test */
struct resolv_fake_ctx);
switch(opt) {
return rv;