예제 #1
0
파일: hash.c 프로젝트: libbitc/libbitc
static void test_sha1()
{
	/* Let the message be the ASCII string "abc". [file] The resulting
	 * 160-bit message digest is a9993e36 4706816a ba3e2571 7850c26c
	 * 9cd0d89d.
	 */
	{
		const uint8_t msg[] = "abc";

		const uint8_t expect[] = {
			0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a,
			0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c,
			0x9c, 0xd0, 0xd8, 0x9d };
		check_sha1(msg, sizeof(msg)-1, expect);
	}

	/* Let the message be the ASCII string
	 * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq". [file]
	 * The resulting 160-bit message digest is 84983e44 1c3bd26e
	 * baae4aa1 f95129e5 e54670f1.
	 */
	{
		const uint8_t msg[] =
			"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
		const uint8_t expect[SHA1_DIGEST_LENGTH] = {
			0x84, 0x98, 0x3e, 0x44, 0x1c, 0x3b, 0xd2, 0x6e,
			0xba, 0xae, 0x4a, 0xa1, 0xf9, 0x51, 0x29, 0xe5,
			0xe5, 0x46, 0x70, 0xf1 };
		check_sha1(msg, sizeof(msg)-1, expect);
	}

	/* Let the message be the binary-coded form of the ASCII string
	 * which consists of 1,000,000 repetitions of the character
	 * "a". [file] The resulting SHA-1 message digest is 34aa973c
	 * d4c4daa4 f61eeb2b dbad2731 6534016f.
	 */
	{
		void *msg = malloc(1000000);
		memset(msg, 'a', 1000000);

		const uint8_t expect[SHA1_DIGEST_LENGTH] = {
			0x34, 0xaa, 0x97, 0x3c, 0xd4, 0xc4, 0xda, 0xa4,
			0xf6, 0x1e, 0xeb, 0x2b, 0xdb, 0xad, 0x27, 0x31,
			0x65, 0x34, 0x01, 0x6f };
		check_sha1(msg, 1000000, expect);
		free(msg);
	}
}
void test_binlog(TestConnections* Test)
{
    int i;
    MYSQL* binlog;
    Test->repl->connect();

    Test->set_timeout(100);
    Test->try_query(Test->repl->nodes[0], (char *) "SET NAMES utf8mb4");
    Test->try_query(Test->repl->nodes[0], (char *) "set autocommit=1");
    Test->try_query(Test->repl->nodes[0], (char *) "select USER()");

    Test->set_timeout(100);
    create_t1(Test->repl->nodes[0]);
    Test->add_result(insert_into_t1(Test->repl->nodes[0], 4), "Data inserting to t1 failed\n");
    Test->stop_timeout();
    Test->tprintf("Sleeping to let replication happen\n");
    sleep(60);

    for (i = 0; i < Test->repl->N; i++)
    {
        Test->tprintf("Checking data from node %d (%s)\n", i, Test->repl->IP[i]);
        Test->set_timeout(100);
        Test->add_result(select_from_t1(Test->repl->nodes[i], 4), "Selecting from t1 failed\n");
        Test->stop_timeout();
    }

    Test->set_timeout(10);
    Test->tprintf("First transaction test (with ROLLBACK)\n");
    start_transaction(Test);

    Test->set_timeout(50);

    Test->tprintf("SELECT * FROM t1 WHERE fl=10, checking inserted values\n");
    Test->add_result(execute_query_check_one(Test->repl->nodes[0], (char *) "SELECT * FROM t1 WHERE fl=10",
                     "111"), "SELECT check failed\n");

    //Test->add_result(check_sha1(Test), "sha1 check failed\n");

    Test->tprintf("ROLLBACK\n");
    Test->try_query(Test->repl->nodes[0], (char *) "ROLLBACK");
    Test->tprintf("INSERT INTO t1 VALUES(112, 10)\n");
    Test->try_query(Test->repl->nodes[0], (char *) "INSERT INTO t1 VALUES(112, 10)");
    Test->try_query(Test->repl->nodes[0], (char *) "COMMIT");
    Test->stop_timeout();
    sleep(20);

    Test->set_timeout(20);
    Test->tprintf("SELECT * FROM t1 WHERE fl=10, checking inserted values\n");
    Test->add_result(execute_query_check_one(Test->repl->nodes[0], (char *) "SELECT * FROM t1 WHERE fl=10",
                     "112"), "SELECT check failed\n");

    Test->tprintf("SELECT * FROM t1 WHERE fl=10, checking inserted values from slave\n");
    Test->add_result(execute_query_check_one(Test->repl->nodes[2], (char *) "SELECT * FROM t1 WHERE fl=10",
                     "112"), "SELECT check failed\n");
    Test->tprintf("DELETE FROM t1 WHERE fl=10\n");
    Test->try_query(Test->repl->nodes[0], (char *) "DELETE FROM t1 WHERE fl=10");
    Test->tprintf("Checking t1\n");
    Test->add_result(select_from_t1(Test->repl->nodes[0], 4), "SELECT from t1 failed\n");

    Test->tprintf("Second transaction test (with COMMIT)\n");
    start_transaction(Test);

    Test->tprintf("COMMIT\n");
    Test->try_query(Test->repl->nodes[0], (char *) "COMMIT");

    Test->tprintf("SELECT, checking inserted values\n");
    Test->add_result(execute_query_check_one(Test->repl->nodes[0], (char *) "SELECT * FROM t1 WHERE fl=10",
                     "111"), "SELECT check failed\n");

    Test->tprintf("SELECT, checking inserted values from slave\n");
    Test->add_result(execute_query_check_one(Test->repl->nodes[2], (char *) "SELECT * FROM t1 WHERE fl=10",
                     "111"), "SELECT check failed\n");
    Test->tprintf("DELETE FROM t1 WHERE fl=10\n");
    Test->try_query(Test->repl->nodes[0], (char *) "DELETE FROM t1 WHERE fl=10");

    Test->stop_timeout();

    Test->set_timeout(50);
    Test->add_result(check_sha1(Test), "sha1 check failed\n");
    Test->repl->close_connections();

    Test->stop_timeout();

    // test SLAVE STOP/START
    for (int j = 0; j < 3; j++)
    {
        Test->set_timeout(100);
        Test->repl->connect();

        Test->tprintf("Dropping and re-creating t1\n");
        Test->try_query(Test->repl->nodes[0], (char *) "DROP TABLE IF EXISTS t1");
        create_t1(Test->repl->nodes[0]);

        Test->tprintf("Connecting to MaxScale binlog router\n");
        binlog = open_conn(Test->binlog_port, Test->maxscale_IP, Test->repl->user_name, Test->repl->password,
                           Test->ssl);

        Test->tprintf("STOP SLAVE against Maxscale binlog\n");
        execute_query(binlog, (char *) "STOP SLAVE");

        if (j == 1)
        {
            Test->tprintf("FLUSH LOGS on master\n");
            execute_query(Test->repl->nodes[0], (char *) "FLUSH LOGS");
        }
        Test->add_result(insert_into_t1(Test->repl->nodes[0], 4), "INSERT into t1 failed\n");

        Test->tprintf("START SLAVE against Maxscale binlog\n");
        Test->try_query(binlog, (char *) "START SLAVE");

        Test->tprintf("Sleeping to let replication happen\n");
        Test->stop_timeout();
        sleep(30);

        for (i = 0; i < Test->repl->N; i++)
        {
            Test->set_timeout(50);
            Test->tprintf("Checking data from node %d (%s)\n", i, Test->repl->IP[i]);
            Test->add_result(select_from_t1(Test->repl->nodes[i], 4), "SELECT from t1 failed\n");
        }

        Test->set_timeout(100);
        Test->add_result(check_sha1(Test), "sha1 check failed\n");
        Test->repl->close_connections();
        Test->stop_timeout();
    }
}