1 /******************************************************************************* 2 3 Test-suite for ocean.util.log.Stats. 4 5 Copyright: 6 Copyright (c) 2009-2016 dunnhumby Germany GmbH. 7 All rights reserved. 8 9 License: 10 Boost Software License Version 1.0. See LICENSE_BOOST.txt for details. 11 Alternatively, this file may be distributed under the terms of the Tango 12 3-Clause BSD License (see LICENSE_BSD.txt for details). 13 14 *******************************************************************************/ 15 16 module ocean.util.log.Stats_slowtest; 17 18 import ocean.core.Test, 19 ocean.util.log.Stats; 20 21 import ocean.meta.types.Qualifiers; 22 import ocean.io.device.TempFile; 23 24 unittest 25 { 26 class MyStatsLog : StatsLog 27 { 28 this ( Config config ) { super(config); } 29 30 void test() 31 { 32 .test!("==")(this.buffer[], `x:10`[]); 33 } 34 } 35 36 class Stats 37 { 38 int x; 39 } 40 41 scope temp_file = new TempFile; 42 43 auto logger = new MyStatsLog(new StatsLog.Config(temp_file.toString())); 44 45 auto stats = new Stats(); 46 stats.x = 10; 47 48 logger.add(stats); 49 logger.test(); 50 } 51 52 unittest 53 { 54 scope temp_file = new TempFile; 55 56 class TestLogger : StatsLog 57 { 58 this () 59 { 60 super(new StatsLog.Config(temp_file.toString())); 61 } 62 63 void test() 64 { 65 .test!("==")( 66 this.buffer[], 67 `workers_hired:420 workers_injured:0` 68 ~ ` production_line/samsung/phone_built:10000` 69 ~ ` production_line/samsung/laptop_built:200` 70 ~ ` production_line/apple/phone_built:800` 71 ~ ` production_line/apple/laptop_built:100`); 72 } 73 } 74 75 auto logger = new TestLogger(); 76 77 // Stats about a factory 78 struct FactoryStats 79 { 80 ulong workers_hired; 81 ulong workers_injured; 82 } 83 84 // Stats about a single production line 85 struct ProductionLineStats 86 { 87 ulong phone_built; 88 ulong laptop_built; 89 } 90 91 FactoryStats stats; 92 stats.workers_hired = 420; 93 94 static struct Entry 95 { 96 istring name; 97 ProductionLineStats stats; 98 } 99 100 Entry[] entries = [ 101 Entry("samsung", ProductionLineStats(10_000, 200)), 102 Entry("apple", ProductionLineStats(800, 100)) 103 ]; 104 105 // log everything 106 logger.add(stats); 107 108 foreach (entry; entries) 109 logger.addObject!("production_line")(entry.name, entry.stats); 110 111 logger.test(); 112 }