public void TestVlcMp32WavJobActuallyGetsDone() { var file = TestUtilities.GetTestFile("NeedinYou2SecWavMp3128.mp3"); var audioConfiguration = new AudioConfiguration { Format = AudioConfiguration.ConversionFormats.Wav }; var portAllocator = MockRepository.GenerateMock<IPortAllocator>(); portAllocator.Expect(x => x.NewPort()).Return(42); var job = new VlcAudioJob(audioConfiguration, portAllocator, MockRepository.GenerateMock<IStatusParser>(), MockRepository.GenerateMock<IVlcStatusSource>(), new TimeSouce(), MockRepository.GenerateMock<ILogger>()); Assert.AreEqual(VlcJob.JobState.NotStarted, job.State); job.InputFile = file; var expectedOutputFile = Path.Combine(TestUtilities.GetTestOutputDir(), "output2.wav"); job.OutputFile = new FileInfo(expectedOutputFile); var driver = new VlcDriver(new VlcStarter(MockRepository.GenerateMock<ILogger>())); TestUtilities.SetVlcExeLocationOnNonStandardWindowsEnvironments(driver); Assert.IsFalse(job.OutputFile.Exists, "output file already exists, cannot run test"); driver.StartJob(job); Assert.AreEqual(1, driver.JobBag.Count); Assert.IsNotNull(job.Instance); Assert.IsNotNull(job.Instance.Process); Assert.AreEqual(VlcJob.JobState.Started, job.State); job.Instance.Process.WaitForExit(); SleepToAllowEventHandler(); Assert.AreEqual(VlcJob.JobState.Finished, job.State, "Job state was not set to finished afterwards"); var newFileInfo = new FileInfo(job.OutputFile.FullName); Assert.IsTrue(newFileInfo.Exists); Assert.That(newFileInfo.Length, Is.EqualTo(368684).Within(AllowedOutputFileComparePercentage).Percent); }
public void EnsureExceptionHappensWhenTryingToConvertIfInputFileIsMissing() { var audioConfig = MockRepository.GenerateMock<IAudioConfiguration>(); var portAllocator = MockRepository.GenerateMock<IPortAllocator>(); portAllocator.Expect(x => x.NewPort()).Return(89); var statusSource = MockRepository.GenerateStub<IVlcStatusSource>(); statusSource.Expect(x => x.GetXml()).Return("Foo"); var statusParser = MockRepository.GenerateMock<IStatusParser>(); statusParser.Expect(x => x.Position).Return(67); var job = new VlcAudioJob(audioConfig, portAllocator, statusParser, statusSource, new TimeSouce(), MockRepository.GenerateMock<ILogger>()) { State = VlcJob.JobState.Started, InputFile = new FileInfo(@"C:\Foo.txt"), OutputFile = new FileInfo(@"C:\Foo2.txt") }; job.GetVlcArguments(); }
public void EnsureExpectedCompletionTimeIsEstimatedCorectly() { var audioConfig = MockRepository.GenerateMock<IAudioConfiguration>(); var portAllocator = MockRepository.GenerateMock<IPortAllocator>(); var statusSource = MockRepository.GenerateMock<IVlcStatusSource>(); var statusParser = MockRepository.GenerateMock<IStatusParser>(); statusParser.Expect(x => x.Position).Return(0).Repeat.Once(); var timeSouce = MockRepository.GenerateMock<ITimeSouce>(); var testTime = new DateTime(1988, 3, 26, 18, 0, 0).ToUniversalTime(); timeSouce.Expect(x => x.getDateTime).Return(testTime.AddSeconds(1)).Repeat.Once(); var instance = MockRepository.GenerateMock<IVlcInstance>(); instance.Expect(x => x.StartTime).Return(testTime); var testFile = TestUtilities.GetTestFile("NeedinYou2SecWavMp3128.mp3"); var job = new VlcAudioJob(audioConfig, portAllocator, statusParser, statusSource, timeSouce, MockRepository.GenerateMock<ILogger>()) { State = VlcJob.JobState.Started, InputFile = testFile, OutputFile = new FileInfo(@"C:\Foo2.txt"), Instance = instance }; job.GetVlcArguments(); //To begin with ensure the estimated completion time is 0 Assert.AreEqual(new TimeSpan(0,0,0), job.EstimatedTimeToCompletion); //Ensure the updating the progress calculates 0 as no progress has been made job.UpdateProgress(); Assert.AreEqual(new TimeSpan(0, 0, 0), job.EstimatedTimeToCompletion); // If 30 seconds have elapsed and the job is 25% complete, the estimated finish time should be 1m 30s statusParser.Expect(x => x.Position).Return(0.25).Repeat.Once(); timeSouce.Expect(x => x.getDateTime).Return(testTime.AddSeconds(30)).Repeat.Once(); job.UpdateProgress(); Assert.AreEqual(new TimeSpan(0, 1, 30), job.EstimatedTimeToCompletion); //If 1 minute has elapsed and the job is 50% complete, the estimated time should be 1 minute statusParser.Expect(x => x.Position).Return(0.5).Repeat.Once(); timeSouce.Expect(x => x.getDateTime).Return(testTime.AddSeconds(60)).Repeat.Once(); job.UpdateProgress(); Assert.AreEqual(new TimeSpan(0, 1, 0), job.EstimatedTimeToCompletion); //If 2 minutes have elapsed and the job is 100% complete, the estimated time left is 0 statusParser.Expect(x => x.Position).Return(1).Repeat.Once(); timeSouce.Expect(x => x.getDateTime).Return(testTime.AddSeconds(120)).Repeat.Once(); job.UpdateProgress(); Assert.AreEqual(new TimeSpan(0, 0, 0), job.EstimatedTimeToCompletion); }
public void EnsureVlcAudioArgumentsArePassedCorrectly() { var audioConfig = MockRepository.GenerateMock<IAudioConfiguration>(); audioConfig.Expect(x => x.GetPartArguments()).Return("!!FOO!!"); var portAllocator = MockRepository.GenerateMock<IPortAllocator>(); portAllocator.Expect(x => x.NewPort()).Return(42); var job = new VlcAudioJob(audioConfig, portAllocator, MockRepository.GenerateMock<IStatusParser>(), MockRepository.GenerateMock<IVlcStatusSource>(), new TimeSouce(), MockRepository.GenerateMock<ILogger>()); var inputfile = TestUtilities.GetTestFile("NeedinYou2SecWav.wav"); job.InputFile = inputfile; var expectedOutputFile = Path.Combine(TestUtilities.GetTestOutputDir(), "output.mp3"); job.OutputFile = new FileInfo(expectedOutputFile); var expectedArguments = string.Format("-I http --http-password goose --http-port 42 \"{0}{2}NeedinYou2SecWav.wav\" \":sout=#transcode{{vcodec=none,!!FOO!!}}:std{{dst='{1}{2}output.mp3',access=file}}\"", TestUtilities.GetTestDir(), TestUtilities.GetTestOutputDir(), Path.DirectorySeparatorChar); var actualArguments = job.GetVlcArguments(); Assert.AreEqual(expectedArguments, actualArguments); }
public void EnsureTheLiveStatusIsReadCorrectly() { var audioConfig = MockRepository.GenerateMock<IAudioConfiguration>(); var portAllocator = MockRepository.GenerateMock<IPortAllocator>(); portAllocator.Expect(x => x.NewPort()).Return(89); var statusSource = MockRepository.GenerateStub<IVlcStatusSource>(); statusSource.Expect(x => x.GetXml()).Return("Foo"); var statusParser = MockRepository.GenerateMock<IStatusParser>(); statusParser.Expect(x => x.Position).Return(67); var timeSource = MockRepository.GenerateMock<ITimeSouce>(); timeSource.Expect(x => x.getDateTime).Return(new DateTime(1988, 03, 26, 18, 0, 0)); var testFile = TestUtilities.GetTestFile("NeedinYou2SecWavMp3128.mp3"); var job = new VlcAudioJob(audioConfig, portAllocator, statusParser, statusSource, timeSource, MockRepository.GenerateMock<ILogger>()) { State = VlcJob.JobState.Started, InputFile = testFile, OutputFile = new FileInfo(@"C:\Foo2.txt"), Instance = MockRepository.GenerateMock<IVlcInstance>() }; job.GetVlcArguments(); job.UpdateProgress(); Assert.AreEqual("http://localhost:89/requests/status.xml", statusSource.Url, "Correct Url was not generated"); Assert.AreEqual(67, job.PercentComplete); statusSource.AssertWasCalled(x =>x.GetXml()); statusParser.AssertWasCalled(x =>x.Parse()); }
public void EnsureTheLiveStatusIsNotUpdatedWhenStateIsNotStarted(VlcJob.JobState state) { var audioConfig = MockRepository.GenerateMock<IAudioConfiguration>(); var portAllocator = MockRepository.GenerateMock<IPortAllocator>(); portAllocator.Expect(x => x.NewPort()).Return(89); var statusSource = MockRepository.GenerateStub<IVlcStatusSource>(); statusSource.Expect(x => x.GetXml()).Return("Foo"); var statusParser = MockRepository.GenerateMock<IStatusParser>(); statusParser.Expect(x => x.Position).Return(67); var job = new VlcAudioJob(audioConfig, portAllocator, statusParser, statusSource, new TimeSouce(), MockRepository.GenerateMock<ILogger>()) { State = state, }; job.UpdateProgress(); statusSource.AssertWasNotCalled(x => x.GetXml()); statusParser.AssertWasNotCalled(x => x.Parse()); }
public void EnsurePortAllocatorIsCalledAndReleased() { //TODO. Ensure Port is always delallocated even in error var audioConfig = MockRepository.GenerateMock<IAudioConfiguration>(); audioConfig.Expect(x => x.GetPartArguments()).Return("!!FOO!!"); var portAllocator = MockRepository.GenerateMock<IPortAllocator>(); portAllocator.Expect(x => x.NewPort()).Return(49); var job = new VlcAudioJob(audioConfig, portAllocator, MockRepository.GenerateMock<IStatusParser>(), MockRepository.GenerateMock<IVlcStatusSource>(), new TimeSouce(), MockRepository.GenerateMock<ILogger>()); var inputfile = TestUtilities.GetTestFile("NeedinYou2SecWav.wav"); job.InputFile = inputfile; var expectedOutputFile = Path.Combine(TestUtilities.GetTestOutputDir(), "output.mp3"); job.OutputFile = new FileInfo(expectedOutputFile); portAllocator.AssertWasNotCalled(x => x.NewPort()); job.GetVlcArguments(); portAllocator.AssertWasCalled(x => x.NewPort()); portAllocator.AssertWasNotCalled(x => x.ReleasePort(Arg<int>.Is.Anything)); job.SetJobComplete(); portAllocator.AssertWasCalled(x => x.ReleasePort(49)); }
public void TestWeGetJobStateChangedEventWhenConversionEnds() { var file = TestUtilities.GetTestFile("NeedinYou2SecWav.wav"); var audioConfiguration = new AudioConfiguration { Format = AudioConfiguration.ConversionFormats.Mp3 }; var portAllocator = MockRepository.GenerateMock<IPortAllocator>(); portAllocator.Expect(x => x.NewPort()).Return(42); var job = new VlcAudioJob(audioConfiguration, portAllocator, MockRepository.GenerateMock<IStatusParser>(), MockRepository.GenerateMock<IVlcStatusSource>(), new TimeSouce(), MockRepository.GenerateMock<ILogger>()); Assert.AreEqual(VlcJob.JobState.NotStarted, job.State); job.InputFile = file; var expectedOutputFile = Path.Combine(TestUtilities.GetTestOutputDir(), "output.mp3"); job.OutputFile = new FileInfo(expectedOutputFile); var starter = MockRepository.GenerateMock<IVlcStarter>(); var instance = MockRepository.GenerateMock<IVlcInstance>(); starter.Expect(x => x.Start(Arg<string>.Is.Anything, Arg<FileInfo>.Is.Anything)).Return(instance); var driver = new VlcDriver(starter); TestUtilities.SetVlcExeLocationOnNonStandardWindowsEnvironments(driver); Assert.AreEqual(0, driver.JobBag.Count); Assert.AreEqual(VlcJob.JobState.NotStarted, job.State); driver.StartJob(job); Assert.AreEqual(1, driver.JobBag.Count); Assert.AreEqual(VlcJob.JobState.Started, job.State); var eventHandlerWasCalled = false; driver.OnJobStateChange += (source, args) => { eventHandlerWasCalled = true; Assert.AreEqual(job, args.Job); }; instance.Raise(x => x.OnExited += null, instance, new EventArgs()); Assert.IsTrue(eventHandlerWasCalled); }