diff options
Diffstat (limited to 'src/tests/cmocka/dummy_child.c')
-rw-r--r-- | src/tests/cmocka/dummy_child.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/tests/cmocka/dummy_child.c b/src/tests/cmocka/dummy_child.c index 057fa6450..3f79ca837 100644 --- a/src/tests/cmocka/dummy_child.c +++ b/src/tests/cmocka/dummy_child.c @@ -35,6 +35,10 @@ int main(int argc, const char *argv[]) int opt; int debug_fd = -1; poptContext pc; + ssize_t len; + ssize_t written; + errno_t ret; + uint8_t buf[IN_BUF_SIZE]; const char *action = NULL; const char *guitar; const char *drums; @@ -80,6 +84,31 @@ int main(int argc, const char *argv[]) DEBUG(SSSDBG_CRIT_FAILURE, "This band sounds weird\n"); _exit(1); } + } else if (strcasecmp(action, "echo") == 0) { + errno = 0; + len = sss_atomic_read_s(STDIN_FILENO, buf, IN_BUF_SIZE); + if (len == -1) { + ret = errno; + DEBUG(SSSDBG_CRIT_FAILURE, "read failed [%d][%s].\n", ret, strerror(ret)); + _exit(1); + } + close(STDIN_FILENO); + + errno = 0; + written = sss_atomic_write_s(3, buf, len); + if (written == -1) { + ret = errno; + DEBUG(SSSDBG_CRIT_FAILURE, "write failed [%d][%s].\n", ret, + strerror(ret)); + _exit(1); + } + close(STDOUT_FILENO); + + if (written != len) { + DEBUG(SSSDBG_CRIT_FAILURE, "Expected to write %zu bytes, wrote %zu\n", + len, written); + _exit(1); + } } } |