add unit test
add functional test