add test case
implements parameter validation
add logger