add tests
This commit is contained in:
parent
8a0d515308
commit
7b824e0268
3
tests/README.md
Normal file
3
tests/README.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# lua
|
||||||
|
|
||||||
|
lua tests
|
63
tests/Smoke/Makefile
Normal file
63
tests/Smoke/Makefile
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# Makefile of /CoreOS/lua/Sanity/Smoke
|
||||||
|
# Description: Basic smoke for lua component
|
||||||
|
# Author: Stepan Sigut <ssigut@redhat.com>
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# 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, see http://www.gnu.org/licenses/.
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
export TEST=/CoreOS/lua/Sanity/Smoke
|
||||||
|
export TESTVERSION=1.0
|
||||||
|
|
||||||
|
BUILT_FILES=
|
||||||
|
|
||||||
|
FILES=$(METADATA) runtest.sh Makefile PURPOSE *.lua
|
||||||
|
|
||||||
|
.PHONY: all install download clean
|
||||||
|
|
||||||
|
run: $(FILES) build
|
||||||
|
./runtest.sh
|
||||||
|
|
||||||
|
build: $(BUILT_FILES)
|
||||||
|
test -x runtest.sh || chmod a+x runtest.sh
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *~ $(BUILT_FILES)
|
||||||
|
|
||||||
|
|
||||||
|
include /usr/share/rhts/lib/rhts-make.include
|
||||||
|
|
||||||
|
$(METADATA): Makefile
|
||||||
|
@echo "Owner: Stepan Sigut <ssigut@redhat.com>" > $(METADATA)
|
||||||
|
@echo "Name: $(TEST)" >> $(METADATA)
|
||||||
|
@echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
|
||||||
|
@echo "Path: $(TEST_DIR)" >> $(METADATA)
|
||||||
|
@echo "Description: Basic smoke for lua component" >> $(METADATA)
|
||||||
|
@echo "Type: Sanity" >> $(METADATA)
|
||||||
|
@echo "TestTime: 5m" >> $(METADATA)
|
||||||
|
@echo "RunFor: lua" >> $(METADATA)
|
||||||
|
@echo "Requires: lua" >> $(METADATA)
|
||||||
|
@echo "Priority: Normal" >> $(METADATA)
|
||||||
|
@echo "License: GPLv2+" >> $(METADATA)
|
||||||
|
@echo "Confidential: no" >> $(METADATA)
|
||||||
|
@echo "Destructive: no" >> $(METADATA)
|
||||||
|
@echo "Releases: -RHEL4 -RHELClient5 -RHELServer5" >> $(METADATA)
|
||||||
|
|
||||||
|
rhts-lint $(METADATA)
|
3
tests/Smoke/PURPOSE
Normal file
3
tests/Smoke/PURPOSE
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
PURPOSE of /CoreOS/lua/Sanity/Smoke
|
||||||
|
Description: Basic smoke for lua component
|
||||||
|
Author: Stepan Sigut <ssigut@redhat.com>
|
35
tests/Smoke/account.lua
Normal file
35
tests/Smoke/account.lua
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
-- account.lua
|
||||||
|
-- from PiL 1, Chapter 16
|
||||||
|
|
||||||
|
Account = {balance = 0}
|
||||||
|
|
||||||
|
function Account:new (o, name)
|
||||||
|
o = o or {name=name}
|
||||||
|
setmetatable(o, self)
|
||||||
|
self.__index = self
|
||||||
|
return o
|
||||||
|
end
|
||||||
|
|
||||||
|
function Account:deposit (v)
|
||||||
|
self.balance = self.balance + v
|
||||||
|
end
|
||||||
|
|
||||||
|
function Account:withdraw (v)
|
||||||
|
if v > self.balance then error("insufficient funds on account "..self.name) end
|
||||||
|
self.balance = self.balance - v
|
||||||
|
end
|
||||||
|
|
||||||
|
function Account:show (title)
|
||||||
|
print(title or "", self.name, self.balance)
|
||||||
|
end
|
||||||
|
|
||||||
|
a = Account:new(nil,"demo")
|
||||||
|
a:show("after creation")
|
||||||
|
a:deposit(1000.00)
|
||||||
|
a:show("after deposit")
|
||||||
|
a:withdraw(100.00)
|
||||||
|
a:show("after withdraw")
|
||||||
|
|
||||||
|
-- this would raise an error
|
||||||
|
b = Account:new(nil,"DEMO")
|
||||||
|
b:withdraw(100.00)
|
28
tests/Smoke/bisect.lua
Normal file
28
tests/Smoke/bisect.lua
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
-- bisect.lua
|
||||||
|
-- bisection method for solving non-linear equations
|
||||||
|
|
||||||
|
delta=1e-6 -- tolerance
|
||||||
|
|
||||||
|
function bisect(f,a,b,fa,fb)
|
||||||
|
local c=(a+b)/2
|
||||||
|
io.write(n," c=",c," a=",a," b=",b,"\n")
|
||||||
|
if c==a or c==b or math.abs(a-b)<delta then return c,b-a end
|
||||||
|
n=n+1
|
||||||
|
local fc=f(c)
|
||||||
|
if fa*fc<0 then return bisect(f,a,c,fa,fc) else return bisect(f,c,b,fc,fb) end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- find root of f in the inverval [a,b]. needs f(a)*f(b)<0
|
||||||
|
function solve(f,a,b)
|
||||||
|
n=0
|
||||||
|
local z,e=bisect(f,a,b,f(a),f(b))
|
||||||
|
io.write(string.format("after %d steps, root is %.17g with error %.1e, f=%.1e\n",n,z,e,f(z)))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- our function
|
||||||
|
function f(x)
|
||||||
|
return x*x*x-x-1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- find zero in [1,2]
|
||||||
|
solve(f,1,2)
|
23
tests/Smoke/globals.lua
Normal file
23
tests/Smoke/globals.lua
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
-- globals.lua
|
||||||
|
-- show all global variables
|
||||||
|
|
||||||
|
local seen={}
|
||||||
|
|
||||||
|
function dump(t,i)
|
||||||
|
seen[t]=true
|
||||||
|
local s={}
|
||||||
|
local n=0
|
||||||
|
for k in pairs(t) do
|
||||||
|
n=n+1 s[n]=k
|
||||||
|
end
|
||||||
|
table.sort(s)
|
||||||
|
for k,v in ipairs(s) do
|
||||||
|
print(i,v)
|
||||||
|
v=t[v]
|
||||||
|
if type(v)=="table" and not seen[v] then
|
||||||
|
dump(v,i.."\t")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
dump(_G,"")
|
4
tests/Smoke/hello.lua
Normal file
4
tests/Smoke/hello.lua
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-- hello.lua
|
||||||
|
-- the first program in every language
|
||||||
|
|
||||||
|
io.write("Hello world, from ",_VERSION,"!\n")
|
70
tests/Smoke/runtest.sh
Executable file
70
tests/Smoke/runtest.sh
Executable file
@ -0,0 +1,70 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# runtest.sh of /CoreOS/lua/Sanity/Smoke
|
||||||
|
# Description: Basic smoke for lua component
|
||||||
|
# Author: Stepan Sigut <ssigut@redhat.com>
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# 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, see http://www.gnu.org/licenses/.
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
# Include Beaker environment
|
||||||
|
. /usr/bin/rhts-environment.sh || exit 1
|
||||||
|
. /usr/share/beakerlib/beakerlib.sh || exit 1
|
||||||
|
|
||||||
|
PACKAGES=${PACKAGES:-"lua"}
|
||||||
|
LUA=${LUA:-"lua"}
|
||||||
|
|
||||||
|
rlJournalStart
|
||||||
|
rlPhaseStartSetup
|
||||||
|
rlAssertRpm --all
|
||||||
|
rlAssertBinaryOrigin $LUA
|
||||||
|
set -o pipefail
|
||||||
|
rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory"
|
||||||
|
rlRun "cp *.lua $TmpDir"
|
||||||
|
rlRun "pushd $TmpDir"
|
||||||
|
rlPhaseEnd
|
||||||
|
|
||||||
|
rlPhaseStartTest
|
||||||
|
rlRun "$LUA hello.lua 2>&1 | tee dump.log" 0
|
||||||
|
rlAssertGrep "Hello world, from Lua" "dump.log"
|
||||||
|
rlPhaseEnd
|
||||||
|
rlPhaseStartTest
|
||||||
|
rlRun "$LUA bisect.lua 2>&1 | tee dump.log" 0
|
||||||
|
rlAssertGrep "after 20 steps, root is 1.3247179985046387 with error 9.5e-07, f=1.8e-07" "dump.log"
|
||||||
|
rlPhaseEnd
|
||||||
|
rlPhaseStartTest
|
||||||
|
rlRun "$LUA globals.lua &>/dev/null" 0
|
||||||
|
rlPhaseEnd
|
||||||
|
rlPhaseStartTest
|
||||||
|
rlRun "$LUA account.lua 2>&1 | tee dump.log" 1
|
||||||
|
rlAssertGrep "after creation" "dump.log"
|
||||||
|
rlAssertGrep "lua: account.lua:18: insufficient funds on account DEMO" "dump.log"
|
||||||
|
rlPhaseEnd
|
||||||
|
rlPhaseStartTest
|
||||||
|
rlRun "$LUA sieve.lua &>/dev/null" 0
|
||||||
|
rlPhaseEnd
|
||||||
|
|
||||||
|
rlPhaseStartCleanup
|
||||||
|
rlRun "popd"
|
||||||
|
rlRun "rm -r $TmpDir" 0 "Removing tmp directory"
|
||||||
|
rlPhaseEnd
|
||||||
|
rlJournalPrintText
|
||||||
|
rlJournalEnd
|
28
tests/Smoke/sieve.lua
Normal file
28
tests/Smoke/sieve.lua
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
-- sieve.lua
|
||||||
|
-- the sieve of Eratosthenes programmed with coroutines
|
||||||
|
-- typical usage: lua -e N=500 sieve.lua | column
|
||||||
|
|
||||||
|
-- generate all the numbers from 2 to n
|
||||||
|
function gen (n)
|
||||||
|
return coroutine.wrap(function ()
|
||||||
|
for i=2,n do coroutine.yield(i) end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- filter the numbers generated by `g', removing multiples of `p'
|
||||||
|
function filter (p, g)
|
||||||
|
return coroutine.wrap(function ()
|
||||||
|
for n in g do
|
||||||
|
if n%p ~= 0 then coroutine.yield(n) end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
N=N or 500 -- from command line
|
||||||
|
x = gen(N) -- generate primes up to N
|
||||||
|
while 1 do
|
||||||
|
local n = x() -- pick a number until done
|
||||||
|
if n == nil then break end
|
||||||
|
print(n) -- must be a prime number
|
||||||
|
x = filter(n, x) -- now remove its multiples
|
||||||
|
end
|
14
tests/tests.yml
Normal file
14
tests/tests.yml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
# This first play always runs on the local staging system
|
||||||
|
- hosts: localhost
|
||||||
|
roles:
|
||||||
|
- role: standard-test-beakerlib
|
||||||
|
tags:
|
||||||
|
- classic
|
||||||
|
- container
|
||||||
|
- atomic
|
||||||
|
tests:
|
||||||
|
- Smoke
|
||||||
|
required_packages:
|
||||||
|
- lua # Required for smoke test
|
||||||
|
- which # Required for smoke test
|
Loading…
Reference in New Issue
Block a user