/* $Id: test.h 4420 2013-03-05 11:59:54Z bennylp $ */
/* 
 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 */
#ifndef __TEST_H__
#define __TEST_H__

#include <pjsip/sip_types.h>

extern pjsip_endpoint *endpt;
extern pj_caching_pool caching_pool;

#define TEST_UDP_PORT	    15060
#define TEST_UDP_PORT_STR   "15060"

/**
 * Memory size to use in caching pool.
 * Default: 2MB
 */
#ifndef PJSIP_TEST_MEM_SIZE
#  define PJSIP_TEST_MEM_SIZE	    (2*1024*1024)
#endif



#define INCLUDE_MESSAGING_GROUP	    1
#define INCLUDE_TRANSPORT_GROUP	    1
#define INCLUDE_TSX_GROUP	    1
#define INCLUDE_INV_GROUP	    1
#define INCLUDE_REGC_GROUP	    1

#define INCLUDE_BENCHMARKS	    1

/*
 * Include tests that normally would fail under certain gcc
 * optimization levels.
 */
#ifndef INCLUDE_GCC_TEST
#   define INCLUDE_GCC_TEST	    0
#endif


#define INCLUDE_URI_TEST	INCLUDE_MESSAGING_GROUP
#define INCLUDE_MSG_TEST	INCLUDE_MESSAGING_GROUP
#define INCLUDE_MULTIPART_TEST	INCLUDE_MESSAGING_GROUP
#define INCLUDE_TXDATA_TEST	INCLUDE_MESSAGING_GROUP
#define INCLUDE_TSX_BENCH	INCLUDE_MESSAGING_GROUP
#define INCLUDE_UDP_TEST	INCLUDE_TRANSPORT_GROUP
#define INCLUDE_LOOP_TEST	INCLUDE_TRANSPORT_GROUP
#define INCLUDE_TCP_TEST	INCLUDE_TRANSPORT_GROUP
#define INCLUDE_RESOLVE_TEST	INCLUDE_TRANSPORT_GROUP
#define INCLUDE_TSX_TEST	INCLUDE_TSX_GROUP
#define INCLUDE_TSX_DESTROY_TEST INCLUDE_TSX_GROUP
#define INCLUDE_INV_OA_TEST	INCLUDE_INV_GROUP
#define INCLUDE_REGC_TEST	INCLUDE_REGC_GROUP


/* The tests */
int uri_test(void);
int msg_test(void);
int msg_err_test(void);
int multipart_test(void);
int txdata_test(void);
int tsx_bench(void);
int tsx_destroy_test(void);
int transport_udp_test(void);
int transport_loop_test(void);
int transport_tcp_test(void);
int resolve_test(void);
int regc_test(void);

struct tsx_test_param
{
    int type;
    int port;
    char *tp_type;
};

int tsx_basic_test(struct tsx_test_param *param);
int tsx_uac_test(struct tsx_test_param *param);
int tsx_uas_test(struct tsx_test_param *param);

/* Transport test helpers (transport_test.c). */
int generic_transport_test(pjsip_transport *tp);
int transport_send_recv_test( pjsip_transport_type_e tp_type,
			      pjsip_transport *ref_tp,
			      char *target_url,
			      int *p_usec_rtt);
int transport_rt_test( pjsip_transport_type_e tp_type,
		       pjsip_transport *ref_tp,
		       char *target_url,
		       int *pkt_lost);
int transport_load_test(char *target_url);

/* Invite session */
int inv_offer_answer_test(void);

/* Test main entry */
int  test_main(void);

/* Test utilities. */
void app_perror(const char *msg, pj_status_t status);
int  init_msg_logger(void);
int  msg_logger_set_enabled(pj_bool_t enabled);
void flush_events(unsigned duration);


void report_ival(const char *name, int value, const char *valname, const char *desc);
void report_sval(const char *name, const char* value, const char *valname, const char *desc);


/* Settings. */
extern int log_level;

#endif	/* __TEST_H__ */
