The function filelib:is_file/1 returns true if its argument refers to an existing file or directory. filelib:is_regular/1 more narrowly returns true on regular files.
assert_config(Filename) -> true = filelib:is_regular(Filename).
Generally you should assume that files exist, are readable, etc. -- and gracefully handle your failures. You'll have to do this second part anyway, as e.g. a file can be deleted after assert_config/1 succeeds and before your read_config/1 tries to open it.