From f1d1fe2cadb99da3fa2a0bb6b47b3730a83a7ba1 Mon Sep 17 00:00:00 2001 From: Scott Date: Thu, 30 Jan 2020 11:21:06 +1030 Subject: [PATCH] device: add tests for IsRunning To check that the IsRunning method is working, some tests are needed. These tests shall be skipped when an AVdevice is not connected, such as when testing within Circle-CI. --- device/alsa/alsa_test.go | 39 ++++++++++++++++- device/file/file_test.go | 62 +++++++++++++++++++++++++++ device/geovision/geovision_test.go | 68 ++++++++++++++++++++++++++++++ device/raspivid/raspivid_test.go | 66 +++++++++++++++++++++++++++++ device/webcam/webcam_test.go | 66 +++++++++++++++++++++++++++++ 5 files changed, 300 insertions(+), 1 deletion(-) create mode 100644 device/file/file_test.go create mode 100644 device/geovision/geovision_test.go create mode 100644 device/raspivid/raspivid_test.go create mode 100644 device/webcam/webcam_test.go diff --git a/device/alsa/alsa_test.go b/device/alsa/alsa_test.go index 44e54e38..5c8e9302 100644 --- a/device/alsa/alsa_test.go +++ b/device/alsa/alsa_test.go @@ -4,9 +4,10 @@ NAME AUTHOR Trek Hopton + Scott Barnard LICENSE - This file is Copyright (C) 2019 the Australian Ocean Lab (AusOcean) + This file is Copyright (C) 2019-2020 the Australian Ocean Lab (AusOcean) It is free software: you can redistribute it and/or modify them under the terms of the GNU General Public License as published by the @@ -25,6 +26,7 @@ LICENSE package alsa import ( + "bytes" "io/ioutil" "os" "strconv" @@ -106,3 +108,38 @@ func TestNearestPowerOfTwo(t *testing.T) { }) } } + +func TestIsRunning(t *testing.T) { + l := logger.New(logger.Debug, &bytes.Buffer{}, true) // Discard logs. + d := New(l) + + var err error + err = d.Set(config.Config{ + SampleRate: 1000, + Channels: 1, + BitDepth: 16, + RecPeriod: 1, + InputCodec: codecutil.ADPCM, + }) + if err != nil { + t.Skipf("could not set device: %w", err) + } + + err = d.Start() + if err != nil { + t.Skipf("could not start device %w", err) + } + time.Sleep(250 * time.Millisecond) + if !d.IsRunning() { + t.Error("device isn't running, when it should be") + } + + err = d.Stop() + if err != nil { + t.Error(err.Error()) + } + time.Sleep(250 * time.Millisecond) + if d.IsRunning() { + t.Error("device is running, when it should not be") + } +} diff --git a/device/file/file_test.go b/device/file/file_test.go new file mode 100644 index 00000000..f2a5d180 --- /dev/null +++ b/device/file/file_test.go @@ -0,0 +1,62 @@ +/* +DESCRIPTION + file_test.go tests the file AVDevice. + +AUTHORS + Scott Barnard + +LICENSE + Copyright (C) 2020 the Australian Ocean Lab (AusOcean) + + It is free software: you can redistribute it and/or modify them + under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + It 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 + in gpl.txt. If not, see http://www.gnu.org/licenses. +*/ + +package file + +import ( + "testing" + "time" + + "bitbucket.org/ausocean/av/revid/config" +) + +func TestIsRunning(t *testing.T) { + d := New() + + var err error + d.Set(config.Config{ + InputPath: "../../../test/test-data/av/input/motion-detection/mjpeg/school.mjpeg", + }) + if err != nil { + t.Skipf("could not set device: %w", err) + } + + err = d.Start() + if err != nil { + t.Skipf("could not start device %w", err) + } + time.Sleep(250 * time.Millisecond) + if !d.IsRunning() { + t.Error("device isn't running, when it should be") + } + + err = d.Stop() + if err != nil { + t.Error(err.Error()) + } + time.Sleep(250 * time.Millisecond) + if d.IsRunning() { + t.Error("device is running, when it should not be") + } +} diff --git a/device/geovision/geovision_test.go b/device/geovision/geovision_test.go new file mode 100644 index 00000000..f57b957b --- /dev/null +++ b/device/geovision/geovision_test.go @@ -0,0 +1,68 @@ +/* +DESCRIPTION + geovision_test.go tests the geovision AVDevice. + +AUTHORS + Scott Barnard + +LICENSE + Copyright (C) 2020 the Australian Ocean Lab (AusOcean) + + It is free software: you can redistribute it and/or modify them + under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + It 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 + in gpl.txt. If not, see http://www.gnu.org/licenses. +*/ + +package geovision + +import ( + "bytes" + "testing" + "time" + + "bitbucket.org/ausocean/av/codec/codecutil" + "bitbucket.org/ausocean/av/revid/config" + "bitbucket.org/ausocean/utils/logger" +) + +func TestIsRunning(t *testing.T) { + l := logger.New(logger.Debug, &bytes.Buffer{}, true) // Discard logs. + d := New(l) + + var err error + d.Set(config.Config{ + Logger: l, + InputCodec: codecutil.H264, + CameraIP: "192.168.4.20", + }) + if err != nil { + t.Skipf("could not set device: %w", err) + } + + err = d.Start() + if err != nil { + t.Skipf("could not start device %w", err) + } + time.Sleep(50 * time.Millisecond) + if !d.IsRunning() { + t.Error("device isn't running, when it should be") + } + + err = d.Stop() + if err != nil { + t.Error(err.Error()) + } + time.Sleep(50 * time.Millisecond) + if d.IsRunning() { + t.Error("device is running, when it should not be") + } +} diff --git a/device/raspivid/raspivid_test.go b/device/raspivid/raspivid_test.go new file mode 100644 index 00000000..22f5117a --- /dev/null +++ b/device/raspivid/raspivid_test.go @@ -0,0 +1,66 @@ +/* +DESCRIPTION + raspivid_test.go tests the raspivid AVDevice. + +AUTHORS + Scott Barnard + +LICENSE + Copyright (C) 2020 the Australian Ocean Lab (AusOcean) + + It is free software: you can redistribute it and/or modify them + under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + It 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 + in gpl.txt. If not, see http://www.gnu.org/licenses. +*/ +package raspivid + +import ( + "bytes" + "testing" + "time" + + "bitbucket.org/ausocean/av/codec/codecutil" + "bitbucket.org/ausocean/av/revid/config" + "bitbucket.org/ausocean/utils/logger" +) + +func TestIsRunning(t *testing.T) { + l := logger.New(logger.Debug, &bytes.Buffer{}, true) // Discard logs. + d := New(l) + + var err error + d.Set(config.Config{ + Logger: l, + InputCodec: codecutil.H264, + }) + if err != nil { + t.Skipf("could not set device: %w", err) + } + + err = d.Start() + if err != nil { + t.Skipf("could not start device %w", err) + } + time.Sleep(250 * time.Millisecond) + if !d.IsRunning() { + t.Error("device isn't running, when it should be") + } + + err = d.Stop() + if err != nil { + t.Error(err.Error()) + } + time.Sleep(250 * time.Millisecond) + if d.IsRunning() { + t.Error("device is running, when it should not be") + } +} diff --git a/device/webcam/webcam_test.go b/device/webcam/webcam_test.go new file mode 100644 index 00000000..c0d15211 --- /dev/null +++ b/device/webcam/webcam_test.go @@ -0,0 +1,66 @@ +/* +DESCRIPTION + webcam_test.go tests the webcam AVDevice. + +AUTHORS + Scott Barnard + +LICENSE + Copyright (C) 2020 the Australian Ocean Lab (AusOcean) + + It is free software: you can redistribute it and/or modify them + under the terms of the GNU General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + It 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 + in gpl.txt. If not, see http://www.gnu.org/licenses. +*/ +package webcam + +import ( + "bytes" + "testing" + "time" + + "bitbucket.org/ausocean/av/codec/codecutil" + "bitbucket.org/ausocean/av/revid/config" + "bitbucket.org/ausocean/utils/logger" +) + +func TestIsRunning(t *testing.T) { + l := logger.New(logger.Debug, &bytes.Buffer{}, true) // Discard logs. + d := New(l) + + var err error + d.Set(config.Config{ + Logger: l, + InputCodec: codecutil.H264, + }) + if err != nil { + t.Skipf("could not set device: %w", err) + } + + err = d.Start() + if err != nil { + t.Skipf("could not start device %w", err) + } + time.Sleep(250 * time.Millisecond) + if !d.IsRunning() { + t.Error("device isn't running, when it should be") + } + + err = d.Stop() + if err != nil { + t.Error(err.Error()) + } + time.Sleep(250 * time.Millisecond) + if d.IsRunning() { + t.Error("device is running, when it should not be") + } +}