OSDN Git Service

* winsup.api/devdsp.c (forkrectest): Move synchronization with child
authorcorinna <corinna>
Tue, 13 Apr 2004 09:40:02 +0000 (09:40 +0000)
committercorinna <corinna>
Tue, 13 Apr 2004 09:40:02 +0000 (09:40 +0000)
so that test passes also under high CPU load.
(forkplaytest): Ditto.
(abortplaytest): New function to test ioctl code SNDCTL_DSP_RESET.

winsup/testsuite/ChangeLog
winsup/testsuite/winsup.api/devdsp.c

index 37c569d..d7f2fa0 100644 (file)
@@ -1,3 +1,10 @@
+2004-04-13  Gerd Spalink  <Gerd.Spalink@t-online.de>
+
+       * winsup.api/devdsp.c (forkrectest): Move synchronization with child
+       so that test passes also under high CPU load.
+       (forkplaytest): Ditto.
+       (abortplaytest): New function to test ioctl code SNDCTL_DSP_RESET.
+
 2004-04-04  Gerd Spalink  <Gerd.Spalink@t-online.de>
 
        * winsup.api/devdsp.c (ioctltest): Add 2 tests for ioctl codes
index 087ff3e..02c37b0 100644 (file)
@@ -36,7 +36,7 @@ static const char wavfile_okay[] =
 
 /* Globals required by libltp */
 const char *TCID = "devdsp";   /* set test case identifier */
-int TST_TOTAL = 34;
+int TST_TOTAL = 35;
 
 /* Prototypes */
 void sinegen (void *wave, int rate, int bits, int len, int stride);
@@ -53,6 +53,7 @@ void recordingtest (void);
 void playbacktest (void);
 void monitortest (void);
 void ioctltest (void);
+void abortplaytest (void);
 void playwavtest (void);
 void syncwithchild (pid_t pid, int expected_exit_status);
 void cleanup (void);
@@ -80,6 +81,7 @@ main (int argc, char *argv[])
   monitortest ();
   forkplaytest ();
   forkrectest ();
+  abortplaytest ();
   playwavtest ();
   tst_exit ();
   /* NOTREACHED */
@@ -247,11 +249,10 @@ forkrectest (void)
   if (pid)
     {
       tst_resm (TINFO, "forked, child PID=%d", pid);
-      sleep (1);
+      syncwithchild (pid, 0);
       tst_resm (TINFO, "parent records..");
       rectest (fd, 22050, 1, 16);
       tst_resm (TINFO, "parent done");
-      syncwithchild (pid, 0);
     }
   else
     {                          /* child */
@@ -273,10 +274,10 @@ forkrectest (void)
   if (pid)
     {
       tst_resm (TINFO, "forked, child PID=%d", pid);
+      syncwithchild (pid, TFAIL);      /* expecting error exit */
       tst_resm (TINFO, "parent records again ..");
       rectest (fd, 22050, 1, 16);
       tst_resm (TINFO, "parent done");
-      syncwithchild (pid, TFAIL);      /* expecting error exit */
     }
   else
     {                          /* child */
@@ -315,11 +316,10 @@ forkplaytest (void)
   if (pid)
     {
       tst_resm (TINFO, "forked, child PID=%d", pid);
-      sleep (1);
+      syncwithchild (pid, 0);
       tst_resm (TINFO, "parent plays..");
       playtest (fd, 22050, 0, 8);
       tst_resm (TINFO, "parent done");
-      syncwithchild (pid, 0);
     }
   else
     {                          /* child */
@@ -341,10 +341,10 @@ forkplaytest (void)
   if (pid)
     {
       tst_resm (TINFO, "forked, child PID=%d", pid);
+      syncwithchild (pid, TFAIL);      /* expected failure */
       tst_resm (TINFO, "parent plays again..");
       playtest (fd, 22050, 0, 8);
       tst_resm (TINFO, "parent done");
-      syncwithchild (pid, TFAIL);      /* expected failure */
     }
   else
     {                          /* child */
@@ -604,6 +604,39 @@ sinegenb (int freq, int samprate, unsigned char *value, int len, int stride)
 }
 
 void
+abortplaytest (void)
+{
+  int audio;
+  int size = sizeof (wavfile_okay);
+  int n;
+  int ioctl_par = 0;
+
+  audio = open ("/dev/dsp", O_WRONLY);
+  if (audio < 0)
+    {
+      tst_brkm (TFAIL, cleanup, "Error open /dev/dsp W: %s",
+               strerror (errno));
+    }
+  if ((n = write (audio, wavfile_okay, size)) < 0)
+    {
+      tst_brkm (TFAIL, cleanup, "write: %s", strerror (errno));
+    }
+  if (n != size)
+    {
+      tst_brkm (TFAIL, cleanup, "Wrote %d, expected %d; exit", n, size);
+    }
+  if (ioctl (audio, SNDCTL_DSP_RESET, &ioctl_par) < 0)
+    {
+      tst_brkm (TFAIL, cleanup, "ioctl DSP_RESET: %s", strerror (errno));
+    }
+  if (close (audio) < 0)
+    {
+      tst_brkm (TFAIL, cleanup, "Close audio: %s", strerror (errno));
+    }
+  tst_resm (TPASS, "Playwav + ioctl DSP_RESET=%d", ioctl_par);
+}
+
+void
 playwavtest (void)
 {
   int audio;