[Toybox] I aten't dead.

Rob Landley rob at landley.net
Thu Nov 26 10:29:26 PST 2015


Sorry for the radio silence, I've been working on stuff.

So there's a pile of ps and top patches awaiting me on the list, and I
want to fold top _into_ patch because in theory they're 90% the same
infrastructure. So I started by adding --sort to ps, which involved
splitting the "fetch data from /proc" and "display data" parts into
two separate passes. (In the common case the first function calls the
second, and I managed to slice and dice toybuf so it all still fits in
there in that case.)

However, breaking stuff up and shuffling it around broke things, to
the point where the TTY field is showing "-1:-1" for some processes,
and I need to retest everything in ps to make sure I fix it all.
(That's why I haven't checked it in yet, right now it's a regression.)

As LONG as I need to retest everything, I decided to sit down and fix
up the aboriginal linux infrastructure to let me run a testsuite in a
controlled (and run as root) environment under there.

So I did the aboriginal upgrades (including more granular dependencies
that make rebuilding minor userspace tweaks over and over go faster),
and started a ps test suite and...

It's still pretty darn hard. Here's what I have so far

---
#!/bin/sh

[ -f testing.sh ] && . testing.sh

notroot && continue

#testing "name" "command" "result" "infile" "stdin"

# This is necessarily somewhat brittle, because the PID numbers change
# all over the place (how many kernel threads did this kernel version launch?)
# the time field can change, tty varies by target (serial device name)...

# We test matching expected PIDs under aboriginal linux running under qemu for
# the first few, then mask them out or don't request them for the rest.

TTY="$(tty | sed 's@^/dev/@@')"

# The $() around printf strips trailing newline, so we have to add it back
DEFPAT="%5s %-8s 00:00:00 %s\n"

# calculat/match an actual PID
BASEPID="$(awk '{print $1}' /proc/self/stat)"
testing "ps" "ps | tail -n 2" "$(printf $DEFPAT\n" $(($BASEPID+5))
$TTY ps $(($BASEPID+6)) $TTY "tail -n 2")\n" "" ""
# init can use a single digit number of seconds of cpu time before this breaks
testing "ps -A" "ps -A | head -n 2 | sed 's/00:00:0[0-9]/00:00:00/'" \
  "$(printf $DEFPAT\n" 1 ? BLAH" "" ""

-----

And the "BLAH" part at the end is where I hit "of course the name of
init isn't init here, in this test environment it's "/sbin/oneit -c
/dev/ttySO /mnt/init" which is TOTALLY generic isn't it? I'm already
hitting the time with sed to regularize it and have a HEURISTIC to
skip 5 process IDs because that's what the "testing" script eats
before running the actual test, but _that_ level of regularizing means
what am I actually _testing_ here...

Grrr. When I say many tests are easy to do by hand and a serious pain
to automate, that is exactly what I mean...

Rob

P.S. The kernel moved the jiffy start time to something like ten
minutes before it wraps to force that to get testing, it hasn't done
that to the PIDs but it COULD. Probably won't because PID 1 is special
and it already wraps in regular use anyway, but still...

 1448562566.0


More information about the Toybox mailing list