blob: d15b49d2d6eda779d1004603f8596a7c00a218cc [file] [log] [blame]
-- Copyright 2015 Mirantis, Inc.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
EXPORT_ASSERT_TO_GLOBALS=true
require('luaunit')
require('os')
package.path = package.path .. ";../heka/files/lua/common/?.lua;lua/mocks/?.lua"
local patt = require('patterns')
local l = require('lpeg')
TestPatterns = {}
function TestPatterns:test_Uuid()
assertEquals(patt.Uuid:match('be6876f2-c1e6-42ea-ad95-792a5500f0fa'),
'be6876f2-c1e6-42ea-ad95-792a5500f0fa')
assertEquals(patt.Uuid:match('be6876f2c1e642eaad95792a5500f0fa'),
'be6876f2-c1e6-42ea-ad95-792a5500f0fa')
assertEquals(patt.Uuid:match('ze6876f2c1e642eaad95792a5500f0fa'),
nil)
assertEquals(patt.Uuid:match('be6876f2-c1e642eaad95792a5500f0fa'),
nil)
end
function TestPatterns:test_Timestamp()
-- note that Timestamp:match() returns the number of nanosecs since the
-- Epoch in the local timezone
local_epoch = os.time(os.date("!*t",0)) * 1e9
assertEquals(patt.Timestamp:match('1970-01-01 00:00:01+00:00'),
local_epoch + 1e9)
assertEquals(patt.Timestamp:match('1970-01-01 00:00:02'),
local_epoch + 2e9)
assertEquals(patt.Timestamp:match('1970-01-01 00:00:03'),
local_epoch + 3e9)
assertEquals(patt.Timestamp:match('1970-01-01T00:00:04-00:00'),
local_epoch + 4e9)
assertEquals(patt.Timestamp:match('1970-01-01 01:00:05+01:00'),
local_epoch + 5e9)
assertEquals(patt.Timestamp:match('1970-01-01 00:00:00.123456+00:00'),
local_epoch + 0.123456 * 1e9)
assertEquals(patt.Timestamp:match('1970-01-01 00:01'),
nil)
end
function TestPatterns:test_programname()
assertEquals(l.C(patt.programname):match('nova-api'), 'nova-api')
assertEquals(l.C(patt.programname):match('nova-api foo'), 'nova-api')
end
function TestPatterns:test_anywhere()
assertEquals(patt.anywhere(l.C(patt.dash)):match(' - '), '-')
assertEquals(patt.anywhere(patt.dash):match(' . '), nil)
end
function TestPatterns:test_openstack()
local_epoch = os.time(os.date("!*t",0)) * 1e9
assertEquals(patt.openstack:match(
'1970-01-01 00:00:02 3434 INFO oslo_service.periodic_task [-] Blabla...'),
{Timestamp = local_epoch + 2e9, Pid = '3434', SeverityLabel = 'INFO',
PythonModule = 'oslo_service.periodic_task', Message = '[-] Blabla...'})
end
function TestPatterns:test_openstack_request_context()
assertEquals(patt.openstack_request_context:match('[-]'), nil)
assertEquals(patt.openstack_request_context:match(
"[req-4db318af-54c9-466d-b365-fe17fe4adeed - - - - -]"),
{RequestId = '4db318af-54c9-466d-b365-fe17fe4adeed'})
assertEquals(patt.openstack_request_context:match(
"[req-4db318af-54c9-466d-b365-fe17fe4adeed 8206d40abcc3452d8a9c1ea629b4a8d0 112245730b1f4858ab62e3673e1ee9e2 - - -]"),
{RequestId = '4db318af-54c9-466d-b365-fe17fe4adeed',
UserId = '8206d40a-bcc3-452d-8a9c-1ea629b4a8d0',
TenantId = '11224573-0b1f-4858-ab62-e3673e1ee9e2'})
end
function TestPatterns:test_openstack_http()
assertEquals(patt.openstack_http:match(
'"OPTIONS / HTTP/1.0" status: 200 len: 497 time: 0.0006731'),
{http_method = 'OPTIONS', http_url = '/', http_version = '1.0',
http_status = 200, http_response_size = 497,
http_response_time = 0.0006731})
assertEquals(patt.openstack_http:match(
'foo "OPTIONS / HTTP/1.0" status: 200 len: 497 time: 0.0006731 bar'),
{http_method = 'OPTIONS', http_url = '/', http_version = '1.0',
http_status = 200, http_response_size = 497,
http_response_time = 0.0006731})
end
function TestPatterns:test_openstack_http_with_extra_space()
assertEquals(patt.openstack_http:match(
'"OPTIONS / HTTP/1.0" status: 200 len: 497 time: 0.0006731'),
{http_method = 'OPTIONS', http_url = '/', http_version = '1.0',
http_status = 200, http_response_size = 497,
http_response_time = 0.0006731})
assertEquals(patt.openstack_http:match(
'foo "OPTIONS / HTTP/1.0" status: 200 len: 497 time: 0.0006731 bar'),
{http_method = 'OPTIONS', http_url = '/', http_version = '1.0',
http_status = 200, http_response_size = 497,
http_response_time = 0.0006731})
end
function TestPatterns:test_ip_address()
assertEquals(patt.ip_address:match('192.168.1.2'),
{ip_address = '192.168.1.2'})
assertEquals(patt.ip_address:match('foo 192.168.1.2 bar'),
{ip_address = '192.168.1.2'})
assertEquals(patt.ip_address:match('192.1688.1.2'), nil)
end
lu = LuaUnit
lu:setVerbosity( 1 )
os.exit( lu:run() )