mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
basic unit test to check correct stream state is being used.
This commit is contained in:
parent
f9324febde
commit
8f8ba2d591
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2016, Intel Corporation
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
@ -1172,6 +1172,106 @@ TEST(HyperscanTestBehaviour, Vectored7) {
|
||||
hs_free_database(db);
|
||||
}
|
||||
|
||||
TEST(HyperscanTestBehaviour, MultiStream1) {
|
||||
hs_error_t err;
|
||||
|
||||
// build a database
|
||||
hs_database_t *db = buildDB("foo.*bar.*\\b", 0, 0, HS_MODE_STREAM);
|
||||
ASSERT_TRUE(db != nullptr);
|
||||
|
||||
// alloc some scratch
|
||||
hs_scratch_t *scratch = nullptr;
|
||||
err = hs_alloc_scratch(db, &scratch);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_TRUE(scratch != nullptr);
|
||||
|
||||
hs_stream_t *stream = nullptr;
|
||||
err = hs_open_stream(db, 0, &stream);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
ASSERT_TRUE(stream != nullptr);
|
||||
|
||||
hs_stream_t *stream2 = nullptr;
|
||||
err = hs_open_stream(db, 0, &stream2);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
ASSERT_TRUE(stream2 != nullptr);
|
||||
|
||||
matchCount = 0;
|
||||
const string data("foo bara");
|
||||
err = hs_scan_stream(stream, data.c_str(), data.size(), 0, scratch,
|
||||
countHandler, nullptr);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_EQ(0U, matchCount); // hasn't matched until stream end
|
||||
|
||||
const string data2("foo bar ");
|
||||
err = hs_scan_stream(stream2, data2.c_str(), data2.size(), 0, scratch,
|
||||
nullptr, nullptr);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_EQ(0U, matchCount);
|
||||
|
||||
err = hs_close_stream(stream, scratch, countHandler, nullptr);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_EQ(1U, matchCount);
|
||||
|
||||
err = hs_close_stream(stream2, scratch, countHandler, nullptr);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_EQ(1U, matchCount);
|
||||
|
||||
// teardown
|
||||
err = hs_free_scratch(scratch);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
hs_free_database(db);
|
||||
}
|
||||
|
||||
TEST(HyperscanTestBehaviour, MultiStream2) {
|
||||
hs_error_t err;
|
||||
|
||||
// build a database
|
||||
hs_database_t *db = buildDB("foo.*bar.*\\b", 0, 0, HS_MODE_STREAM);
|
||||
ASSERT_TRUE(db != nullptr);
|
||||
|
||||
// alloc some scratch
|
||||
hs_scratch_t *scratch = nullptr;
|
||||
err = hs_alloc_scratch(db, &scratch);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_TRUE(scratch != nullptr);
|
||||
|
||||
hs_stream_t *stream = nullptr;
|
||||
err = hs_open_stream(db, 0, &stream);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
ASSERT_TRUE(stream != nullptr);
|
||||
|
||||
hs_stream_t *stream2 = nullptr;
|
||||
err = hs_open_stream(db, 0, &stream2);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
ASSERT_TRUE(stream2 != nullptr);
|
||||
|
||||
matchCount = 0;
|
||||
const string data2("foo bar ");
|
||||
err = hs_scan_stream(stream2, data2.c_str(), data2.size(), 0, scratch,
|
||||
nullptr, nullptr);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_EQ(0U, matchCount);
|
||||
|
||||
const string data("foo bara");
|
||||
err = hs_scan_stream(stream, data.c_str(), data.size(), 0, scratch,
|
||||
countHandler, nullptr);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_EQ(0U, matchCount); // hasn't matched until stream end
|
||||
|
||||
err = hs_close_stream(stream2, scratch, countHandler, nullptr);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_EQ(0U, matchCount);
|
||||
|
||||
err = hs_close_stream(stream, scratch, countHandler, nullptr);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
EXPECT_EQ(1U, matchCount);
|
||||
|
||||
// teardown
|
||||
err = hs_free_scratch(scratch);
|
||||
ASSERT_EQ(HS_SUCCESS, err);
|
||||
hs_free_database(db);
|
||||
}
|
||||
|
||||
TEST(regression, UE_1005) {
|
||||
hs_error_t err;
|
||||
vector<pattern> patterns;
|
||||
|
Loading…
x
Reference in New Issue
Block a user