
#include <machinarium/machinarium.h>
#include <machinarium/io.h>
#include <tests/odyssey_test.h>

#include <arpa/inet.h>

static void test_connect_coroutine(void *arg)
{
	(void)arg;
	mm_io_t *client = mm_io_create();
	test(client != NULL);

	struct sockaddr_in sa;
	sa.sin_family = AF_INET;
	sa.sin_addr.s_addr = inet_addr("213.180.204.3");
	sa.sin_port = htons(80);
	int rc;
	rc = mm_io_connect(client, (struct sockaddr *)&sa, 0);
	test(rc == -1);

	mm_io_free(client);
}

static void test_waiter(void *arg)
{
	(void)arg;
	int id = machine_coroutine_create(test_connect_coroutine, NULL);
	test(id != -1);

	machine_sleep(0);

	int rc;
	rc = machine_join(id);
	test(rc == 0);
}

void machinarium_test_connect_timeout(void)
{
	machinarium_init();

	int id;
	id = machine_create("test", test_waiter, NULL);
	test(id != -1);

	int rc;
	rc = machine_wait(id);
	test(rc != -1);

	machinarium_free();
}
