summaryrefslogtreecommitdiff
path: root/backendtest
diff options
context:
space:
mode:
authorCsaba Hruska <csaba.hruska@gmail.com>2016-02-17 13:32:39 +0100
committerCsaba Hruska <csaba.hruska@gmail.com>2016-02-17 13:32:39 +0100
commita4d0106183850b6e06b42ee10b51ad46716a6672 (patch)
tree33165b1171cf8655902bb2f36d10b615bea72e2e /backendtest
parent5c6d3a26ef2de9a4bf7992e4eb0406d7bbcff5bd (diff)
improve backend test
Diffstat (limited to 'backendtest')
-rw-r--r--backendtest/TestServer.hs24
1 files changed, 18 insertions, 6 deletions
diff --git a/backendtest/TestServer.hs b/backendtest/TestServer.hs
index a84fc72b..07d38dbe 100644
--- a/backendtest/TestServer.hs
+++ b/backendtest/TestServer.hs
@@ -15,6 +15,7 @@ import qualified Data.Map as Map
15import Text.Printf 15import Text.Printf
16import System.FilePath 16import System.FilePath
17import System.Directory 17import System.Directory
18import System.Process
18 19
19import TestData 20import TestData
20import LambdaCube.Linear 21import LambdaCube.Linear
@@ -44,9 +45,9 @@ application pending = do
44 (testName,renderJob@RenderJob{..}) <- EditorExamplesTest.getRenderJob -- TODO 45 (testName,renderJob@RenderJob{..}) <- EditorExamplesTest.getRenderJob -- TODO
45 WS.sendTextData conn . encode $ renderJob 46 WS.sendTextData conn . encode $ renderJob
46 -- get render result: pipeline x scene x frame 47 -- get render result: pipeline x scene x frame
47 forM_ pipelines $ \PipelineInfo{..} -> do 48 res <- forM pipelines $ \PipelineInfo{..} -> do
48 forM_ (zip [one..] $ V.toList scenes) $ \(sIdx,Scene{..}) -> 49 forM (zip [one..] $ V.toList scenes) $ \(sIdx,Scene{..}) ->
49 forM_ [one..length frames] $ \fIdx -> do 50 forM [one..length frames] $ \fIdx -> do
50 let name = "backend-test-data/" ++ testName ++ "/result/" ++ takeBaseName pipelineName ++ "_scn" ++ printf "%02d" sIdx ++ "_" ++ printf "%02d" fIdx ++ ".png" 51 let name = "backend-test-data/" ++ testName ++ "/result/" ++ takeBaseName pipelineName ++ "_scn" ++ printf "%02d" sIdx ++ "_" ++ printf "%02d" fIdx ++ ".png"
51 decodeStrict <$> WS.receiveData conn >>= \case 52 decodeStrict <$> WS.receiveData conn >>= \case
52 Nothing -> fail $ name ++ " - invalid RenderJobResult" 53 Nothing -> fail $ name ++ " - invalid RenderJobResult"
@@ -55,7 +56,8 @@ application pending = do
55 createDirectoryIfMissing True (takeDirectory name) 56 createDirectoryIfMissing True (takeDirectory name)
56 compareOrSaveImage name =<< toImage frImageWidth frImageHeight . either error id . B64.decode =<< WS.receiveData conn 57 compareOrSaveImage name =<< toImage frImageWidth frImageHeight . either error id . B64.decode =<< WS.receiveData conn
57 --putStrLn $ name ++ "\t" ++ unwords (map showTime . V.toList $ frRenderTimes) 58 --putStrLn $ name ++ "\t" ++ unwords (map showTime . V.toList $ frRenderTimes)
58 putStrLn "render job done" 59 let differ = or $ concat $ fmap concat res
60 putStrLn $ "render job: " ++ if differ then "FAIL" else "OK"
59 forever $ threadDelay 1000000 61 forever $ threadDelay 1000000
60 62
61compareOrSaveImage name img@(Image w h pixels) = do 63compareOrSaveImage name img@(Image w h pixels) = do
@@ -63,15 +65,25 @@ compareOrSaveImage name img@(Image w h pixels) = do
63 False -> do 65 False -> do
64 putStrLn $ "new image: " ++ name 66 putStrLn $ "new image: " ++ name
65 savePngImage name (ImageRGBA8 img) 67 savePngImage name (ImageRGBA8 img)
68 return False
66 True -> do 69 True -> do
67 Right (ImageRGBA8 (Image origW origH origPixels)) <- readImage name 70 Right (ImageRGBA8 (Image origW origH origPixels)) <- readImage name
68 let diffPixels a b = SV.sum $ SV.zipWith (\x y -> (fromIntegral x - fromIntegral y)^2) a b :: Float 71 let diffPixels a b = SV.sum $ SV.zipWith (\x y -> (fromIntegral x - fromIntegral y)^2) a b :: Float
69 diff = diffPixels pixels origPixels 72 diff = diffPixels pixels origPixels
70 threshold = 0 73 threshold = 0
71 case (w /= origW || h /= origH || diff > threshold) of 74 differ = w /= origW || h /= origH || diff > threshold
75 case differ of
72 True -> do 76 True -> do
73 fail $ name ++ " - differ!!! " ++ show diff 77 putStrLn $ name ++ " - differ!!! " ++ show diff
78 let mismatchImage = dropExtension name ++ "_mismatch.png"
79 diffImage = dropExtension name ++ "_diff.png"
80 putStrLn $ "save difference: " ++ diffImage
81 savePngImage mismatchImage (ImageRGBA8 img)
82 (exitCode,out,err) <- readProcessWithExitCode "compare" ["-compose","src",name,mismatchImage,diffImage] ""
83 --let res = read . head . words $ out :: Float
84 print (out,err)
74 False -> putStrLn $ name ++ " OK" 85 False -> putStrLn $ name ++ " OK"
86 return differ
75 87
76toImage :: Int -> Int -> BS.ByteString -> IO (Image PixelRGBA8) 88toImage :: Int -> Int -> BS.ByteString -> IO (Image PixelRGBA8)
77toImage w h buf = do 89toImage w h buf = do