Add more tests and fix capability logging
This commit is contained in:
parent
1864b0e395
commit
1e5413f74f
|
@ -32,6 +32,9 @@ static void test_session_id_valid(void) {
|
|||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
test_session_id_valid();
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "util.h"
|
||||
#include "strv.h"
|
||||
#include "utf8.h"
|
||||
#include "ctype.h"
|
||||
|
||||
int write_string_to_file(FILE *f, const char *line) {
|
||||
errno = 0;
|
||||
|
@ -672,16 +673,18 @@ int get_status_field(const char *filename, const char *pattern, char **field) {
|
|||
return -ENOENT;
|
||||
|
||||
t += strlen(pattern);
|
||||
/* Also skip zeros, because when this is used for capabilities,
|
||||
* we don't want the zeros. This way the same capability set
|
||||
* always maps to the same string, irrespective of the total
|
||||
* capability set size. For other numbers it shouldn't matter.
|
||||
*/
|
||||
if (*t) {
|
||||
t += strspn(t, WHITESPACE "0");
|
||||
t += strspn(t, " \t");
|
||||
|
||||
/* Also skip zeros, because when this is used for
|
||||
* capabilities, we don't want the zeros. This way the
|
||||
* same capability set always maps to the same string,
|
||||
* irrespective of the total capability set size. For
|
||||
* other numbers it shouldn't matter. */
|
||||
t += strspn(t, "0");
|
||||
/* Back off one char if there's nothing but whitespace
|
||||
and zeros */
|
||||
if (!*t)
|
||||
if (!*t || isspace(*t))
|
||||
t --;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
#include "fileio.h"
|
||||
#include "strv.h"
|
||||
#include "env-util.h"
|
||||
#include "def.h"
|
||||
#include "ctype.h"
|
||||
|
||||
static void test_parse_env_file(void) {
|
||||
char t[] = "/tmp/test-fileio-in-XXXXXX",
|
||||
|
@ -230,8 +232,8 @@ static void test_executable_is_script(void) {
|
|||
}
|
||||
|
||||
static void test_status_field(void) {
|
||||
_cleanup_free_ char *t = NULL, *p = NULL, *s = NULL;
|
||||
unsigned long long total, buffers;
|
||||
_cleanup_free_ char *t = NULL, *p = NULL, *s = NULL, *z = NULL;
|
||||
unsigned long long total = 0, buffers = 0;
|
||||
int r;
|
||||
|
||||
assert_se(get_status_field("/proc/self/status", "\nThreads:", &t) == 0);
|
||||
|
@ -239,26 +241,60 @@ static void test_status_field(void) {
|
|||
assert_se(streq(t, "1"));
|
||||
|
||||
r = get_status_field("/proc/meminfo", "MemTotal:", &p);
|
||||
if (r == -ENOENT)
|
||||
return;
|
||||
assert(r == 0);
|
||||
puts(p);
|
||||
assert_se(safe_atollu(p, &total) == 0);
|
||||
if (r != -ENOENT) {
|
||||
assert(r == 0);
|
||||
puts(p);
|
||||
assert_se(safe_atollu(p, &total) == 0);
|
||||
}
|
||||
|
||||
r = get_status_field("/proc/meminfo", "\nBuffers:", &s);
|
||||
if (r == -ENOENT)
|
||||
return;
|
||||
assert(r == 0);
|
||||
puts(s);
|
||||
assert_se(safe_atollu(s, &buffers) == 0);
|
||||
if (r != -ENOENT) {
|
||||
assert(r == 0);
|
||||
puts(s);
|
||||
assert_se(safe_atollu(s, &buffers) == 0);
|
||||
}
|
||||
|
||||
assert(buffers < total);
|
||||
if (p && t)
|
||||
assert(buffers < total);
|
||||
|
||||
/* Seccomp should be a good test for field full of zeros. */
|
||||
r = get_status_field("/proc/meminfo", "\nSeccomp:", &z);
|
||||
if (r != -ENOENT) {
|
||||
assert(r == 0);
|
||||
puts(z);
|
||||
assert_se(safe_atollu(z, &buffers) == 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void test_capeff(void) {
|
||||
int pid, p;
|
||||
|
||||
for (pid = 0; pid < 2; pid++) {
|
||||
_cleanup_free_ char *capeff = NULL;
|
||||
int r;
|
||||
|
||||
r = get_process_capeff(0, &capeff);
|
||||
log_info("capeff: '%s' (r=%d)", capeff, r);
|
||||
|
||||
if (r == -ENOENT || r == -EPERM)
|
||||
return;
|
||||
|
||||
assert(r == 0);
|
||||
assert(*capeff);
|
||||
p = capeff[strspn(capeff, DIGITS "abcdefABCDEF")];
|
||||
assert(!p || isspace(p));
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
test_parse_env_file();
|
||||
test_parse_multiline_env_file();
|
||||
test_executable_is_script();
|
||||
test_status_field();
|
||||
test_capeff();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue