Home | History | Annotate | Line # | Download | only in unittests
      1 /*
      2  * Copyright (c) 2016-2021 Apple Inc. All rights reserved.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *     https://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef UNITTEST_COMMON_H
     18 #define UNITTEST_COMMON_H
     19 
     20 #include "dns_sd.h"
     21 #include "uds_daemon.h"
     22 #include "uDNS.h"
     23 #include "dnssd_ipc.h"
     24 #include <netdb.h>                  // for getaddrinfo
     25 #include <net/if.h>
     26 #include <pthread.h>
     27 #include <CoreFoundation/CoreFoundation.h>
     28 #include "mDNSFeatures.h"
     29 
     30 // Primary interface info that is used when simulating the receive of the response packet
     31 extern mDNSInterfaceID primary_interfaceID;
     32 extern mDNSAddr primary_v4;
     33 extern mDNSAddr primary_v6;
     34 extern mDNSAddr primary_router;
     35 
     36 // Arbitrary values to simulate a client_request request
     37 #define client_req_sd				12
     38 #define client_req_uid				502
     39 #define client_req_hdr_bytes		28
     40 #define client_req_hdr_version		1
     41 #define client_resp_src_port		13568
     42 #define client_resp_dst_port		49339
     43 #define uDNS_TargetQID				16745
     44 #define client_req_process_id		15418
     45 static char client_req_pid_name[MAXCOMLEN] = "mDNSUnitTest";
     46 
     47 //Arbitrary values to simulate a DNS server
     48 #define dns_server_timeout			30
     49 #define dns_server_resGroupID		12
     50 static const mDNSv4Addr dns_server_ipv4 = {{ 192, 168, 1, 20 }};
     51 
     52 extern mStatus  init_mdns_environment(mDNSBool enableLogging);
     53 extern mStatus  init_mdns_storage(void);
     54 extern size_t   get_reply_len(char* name, uint16_t rdlen);
     55 extern mStatus  start_client_request(request_state* req, const uint8_t *msgbuf, uint32_t msgsz, uint32_t op, UDPSocket* socket);
     56 extern void     receive_response(const request_state* req, DNSMessage *msg, size_t msgSize);
     57 extern void     get_ip(const char *const name, struct sockaddr_storage *result);
     58 extern void     free_req(request_state* req);
     59 
     60 extern mStatus  mDNS_InitStorage_ut(mDNS *const m, mDNS_PlatformSupport *const p,
     61                                    CacheEntity *rrcachestorage, mDNSu32 rrcachesize,
     62                                    mDNSBool AdvertiseLocalAddresses, mDNSCallback *Callback, void *Context);
     63 
     64 #if MDNSRESPONDER_SUPPORTS(APPLE, DNSSECv2)
     65 
     66 #define MAX_CNAME_TRAVERSAL 11
     67 void
     68 ParseCNameChainFromMessage_ut(
     69     const DNSMessage *      response,
     70     const mDNSu8 *          limit,
     71     const mDNSInterfaceID   InterfaceID,
     72     const domainname *      qname,
     73     domainname              cnameChain[static MAX_CNAME_TRAVERSAL],
     74     mDNSu32  *              outChainLen);
     75 
     76 #define MAX_NUM_NSEC_NSEC3_TO_PROCESS   10
     77 #define MAX_NUM_RRSIG_TO_PROCESS        30
     78 void
     79 ParseDenialOfExistenceObjsFromMessage_ut(
     80     const DNSMessage *      response,
     81     const mDNSu8 *          limit,
     82     const mDNSInterfaceID   InterfaceID,
     83     dnssec_obj_rr_soa_t *   outObjSOA,
     84     dnssec_obj_rr_rrsig_t   objSOARRSIG[static MAX_NUM_RRSIG_TO_PROCESS],
     85     mDNSu8 *                outSOARRSIGCount,
     86     dnssec_obj_rr_nsec_t    outObjNSECs[static MAX_NUM_NSEC_NSEC3_TO_PROCESS],
     87     mDNSu8 *                outNSECCount,
     88     dnssec_obj_rr_nsec3_t   outObjNSEC3s[static MAX_NUM_NSEC_NSEC3_TO_PROCESS],
     89     mDNSu8 *                outNSEC3Count,
     90     dnssec_obj_rr_rrsig_t   outObjRRSIGs[static MAX_NUM_RRSIG_TO_PROCESS],
     91     mDNSu8 *                outRRSIGCount);
     92 
     93 mDNSu16
     94 GetRRTypeFromMessage(const DNSMessage *response, const mDNSu8 *limit, mDNSInterfaceID InterfaceID);
     95 
     96 #endif
     97 
     98 extern void     init_logging_ut(void);
     99 extern void     SetInterfaces_ut(mDNSInterfaceID* primary_interfaceID, mDNSAddr *primary_v4,
    100                                  mDNSAddr* primary_v6, mDNSAddr* primary_router);
    101 extern mStatus  handle_client_request_ut(void *req);
    102 extern void     LogCacheRecords_ut(mDNSs32 now, mDNSu32* retCacheUsed, mDNSu32* retCacheActive);
    103 extern int      LogEtcHosts_ut(mDNS *const m);
    104 extern mDNSBool mDNSMacOSXCreateEtcHostsEntry_ut(const domainname *domain, const struct sockaddr *sa,
    105                                                  const domainname *cname, char *ifname, AuthHash *auth);
    106 extern void     UpdateEtcHosts_ut(void *context);
    107 extern mStatus  AddDNSServer_ut(void);
    108 extern mStatus  AddDNSServerScoped_ut(mDNSInterfaceID interfaceID, ScopeType scoped);
    109 extern mStatus  force_uDNS_SetupDNSConfig_ut(mDNS *const m);
    110 extern mStatus  verify_cache_addr_order_for_domain_ut(mDNS *const m, mDNSu8* octet, mDNSu32 count, const domainname *const name);
    111 
    112 // HelperFunctionTest
    113 extern void mDNSDomainLabelFromCFString_ut(CFStringRef cfs, domainlabel *const namelabel);
    114 mDNSexport mDNSu32 IndexForInterfaceByName_ut(const char *ifname);
    115 
    116 #endif /* UNITTEST_COMMON_H */
    117