public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: cagney@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM] master: Really commit frysk.testbed.StatState
Date: Wed, 16 Jan 2008 12:55:00 -0000 [thread overview]
Message-ID: <20080116125458.4006.qmail@sourceware.org> (raw)
The branch, master has been updated
via 0443d3a51378ad5454ed4b04d12823380e7385cf (commit)
from b9f0693a2c3c776ceba0aa5cf3e172a3084547bb (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email.
- Log -----------------------------------------------------------------
commit 0443d3a51378ad5454ed4b04d12823380e7385cf
Author: Andrew Cagney <cagney@redhat.com>
Date: Wed Jan 16 07:52:11 2008 -0500
Really commit frysk.testbed.StatState
-----------------------------------------------------------------------
Summary of changes:
frysk-core/frysk/testbed/StatState.java | 124 ++++++++++++++++++++
.../TestStatState.java} | 25 ++---
2 files changed, 135 insertions(+), 14 deletions(-)
create mode 100644 frysk-core/frysk/testbed/StatState.java
copy frysk-core/frysk/{debuginfo/CompilerVersion.java => testbed/TestStatState.java} (84%)
First 500 lines of diff:
diff --git a/frysk-core/frysk/testbed/StatState.java b/frysk-core/frysk/testbed/StatState.java
new file mode 100644
index 0000000..5085e8e
--- /dev/null
+++ b/frysk-core/frysk/testbed/StatState.java
@@ -0,0 +1,124 @@
+// This file is part of the program FRYSK.
+//
+// Copyright 2008, Red Hat Inc.
+//
+// FRYSK is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by
+// the Free Software Foundation; version 2 of the License.
+//
+// FRYSK is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with FRYSK; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+//
+// In addition, as a special exception, Red Hat, Inc. gives You the
+// additional right to link the code of FRYSK with code not covered
+// under the GNU General Public License ("Non-GPL Code") and to
+// distribute linked combinations including the two, subject to the
+// limitations in this paragraph. Non-GPL Code permitted under this
+// exception must only link to the code of FRYSK through those well
+// defined interfaces identified in the file named EXCEPTION found in
+// the source code files (the "Approved Interfaces"). The files of
+// Non-GPL Code may instantiate templates or use macros or inline
+// functions from the Approved Interfaces without causing the
+// resulting work to be covered by the GNU General Public
+// License. Only Red Hat, Inc. may make changes or additions to the
+// list of Approved Interfaces. You must obey the GNU General Public
+// License in all respects for all of the FRYSK code and other code
+// used in conjunction with FRYSK except the Non-GPL Code covered by
+// this exception. If you modify this file, you may extend this
+// exception to your version of the file, but you are not obligated to
+// do so. If you do not wish to provide this exception without
+// modification, you must delete this exception statement from your
+// version and license this file solely under the GPL without
+// exception.
+
+package frysk.testbed;
+
+import frysk.proc.Manager;
+import frysk.junit.TestCase;
+import frysk.sys.proc.Stat;
+import frysk.rsl.Log;
+import frysk.event.TimerEvent;
+
+/**
+ * Class for directly tracking <tt>/proc/$$/stat</tt>.
+ */
+
+public class StatState {
+ private final static Log fine = Log.fine(StatState.class);
+ private final static Log finest = Log.finest(StatState.class);
+
+ private final char state;
+ private StatState(char state) {
+ this.state = state;
+ }
+
+ public String toString() {
+ return "StatState." + state;
+ }
+
+ public static final StatState RUNNING = new StatState('R');
+ public static final StatState SLEEPING = new StatState('S');
+ public static final StatState DISK_WAIT = new StatState('D');
+ public static final StatState ZOMBIE = new StatState('Z');
+ public static final StatState TRACED_OR_STOPPED = new StatState('T');
+ public static final StatState PAGING = new StatState('W');
+
+ /**
+ * Asserts that TID is in the specified state; or transitions to
+ * that state within a short period of time.
+ */
+ public void assertIs(int tid) {
+ fine.log(this, "assertInState", tid);
+ Stat stat = new Stat();
+ long startTime = System.currentTimeMillis();
+ stat.refresh(tid);
+ do {
+ stat.refresh();
+ finest.log(this, "assertInState tid", tid, "in", stat.state);
+ if (stat.state == state)
+ break;
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException ie) {
+ finest.log(this, "assertInState: ignoring interrupt");
+ }
+ } while (System.currentTimeMillis()
+ < startTime + TestCase.getTimeoutMilliseconds());
+ TestCase.assertEquals("Stat state for tid " + tid,
+ state, stat.state);
+ }
+
+ private static class Probe extends TimerEvent {
+ private final Stat stat;
+ private final StatState state;
+ Probe(int pid, StatState state) {
+ super(0, 100); // Refresh every 100ms
+ this.stat = new Stat(pid);
+ this.state = state;
+ }
+ public void execute() {
+ stat.refresh();
+ finest.log(state, "assertRunToState tid", stat.tid, "in",
+ stat.state);
+ if (state.state == stat.state) {
+ Manager.eventLoop.remove(this);
+ Manager.eventLoop.requestStop();
+ }
+ }
+ }
+
+ public void assertRunUntil(int tid) {
+ fine.log(this, "assertRunToState tid", tid);
+ Manager.eventLoop.add(new Probe(tid, this));
+ long timeout = TestCase.getTimeoutMilliseconds();
+ TestCase.assertTrue("run to state: " + state,
+ Manager.eventLoop.runPolling(timeout));
+
+ }
+}
diff --git a/frysk-core/frysk/debuginfo/CompilerVersion.java b/frysk-core/frysk/testbed/TestStatState.java
similarity index 84%
copy from frysk-core/frysk/debuginfo/CompilerVersion.java
copy to frysk-core/frysk/testbed/TestStatState.java
index eb50621..679e672 100644
--- a/frysk-core/frysk/debuginfo/CompilerVersion.java
+++ b/frysk-core/frysk/testbed/TestStatState.java
@@ -37,22 +37,19 @@
// version and license this file solely under the GPL without
// exception.
-package frysk.debuginfo;
+package frysk.testbed;
-import frysk.rsl.Log;
+/**
+ * Class for directly tracking <tt>/proc/$$/stat</tt>.
+ */
-public class CompilerVersion {
-
- protected static Log fine = Log.fine(CompilerVersion.class);
- public final String compilerString;
-
- CompilerVersion(String compString) {
- this.compilerString = compString;
- fine.log(this, "Created compilerVersion for:", compString);
+public class TestStatState extends TestLib {
+ public void testSleeping() {
+ Offspring daemon = SlaveOffspring.createDaemon();
+ daemon.assertIs(StatState.SLEEPING);
}
-
- public boolean supportsClassType() {
- return false;
+ public void testRunToSleeping() {
+ Offspring daemon = SlaveOffspring.createDaemon();
+ daemon.assertRunUntil(StatState.SLEEPING);
}
-
}
hooks/post-receive
--
frysk system monitor/debugger
reply other threads:[~2008-01-16 12:55 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080116125458.4006.qmail@sourceware.org \
--to=cagney@sourceware.org \
--cc=frysk-cvs@sourceware.org \
--cc=frysk@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).