public void TestFirstLastGap()
        {
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "DE123455",
                LokationsTyp     = Lokationstyp.MeLo,
                Energieverbrauch = new List <Verbrauch>()
                {
                    new Verbrauch()
                    {
                        Obiskennzahl             = "1234",
                        Wert                     = 123.456M,
                        Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                        Startdatum               = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum                 = new DateTime(2019, 1, 4, 0, 0, 0, DateTimeKind.Utc),
                    },
                    new Verbrauch()
                    {
                        Obiskennzahl             = "1234",
                        Wert                     = 123.456M,
                        Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG,
                        Startdatum               = new DateTime(2019, 1, 4, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum                 = new DateTime(2019, 1, 7, 0, 0, 0, DateTimeKind.Utc),
                    }
                }
            };

            var cr = em.GetCompletenessReport(new TimeRange(new DateTime(2018, 12, 29, 0, 0, 0, DateTimeKind.Utc), new DateTime(2019, 1, 10, 0, 0, 0, DateTimeKind.Utc)));

            Assert.AreEqual(2, cr.Gaps.Count());
            Assert.AreEqual(new DateTime(2018, 12, 29, 0, 0, 0, DateTimeKind.Utc), cr.Gaps.First().Startdatum);
            Assert.AreEqual(new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc), cr.Gaps.First().Enddatum);
            Assert.AreEqual(new DateTime(2019, 1, 7, 0, 0, 0, DateTimeKind.Utc), cr.Gaps.Last().Startdatum);
            Assert.AreEqual(new DateTime(2019, 1, 10, 0, 0, 0, DateTimeKind.Utc), cr.Gaps.Last().Enddatum);
        }
        public void TestRounding()
        {
            string  boFile = Directory.GetFiles("Energiemenge/completeness", "gas_januar_2018.json").First();
            JObject json;

            using (StreamReader r = new StreamReader(boFile))
            {
                string jsonString = r.ReadToEnd();
                json = JsonConvert.DeserializeObject <JObject>(jsonString);
            }
            Energiemenge       em = (Energiemenge)BoMapper.MapObject(JObject.FromObject(json["input"]), LenientParsing.Strict);
            CompletenessReport cr = em.GetCompletenessReport(new TimeRange()
            {
                Start = new DateTime(2017, 12, 31, 23, 0, 0, 0, DateTimeKind.Utc),
                End   = new DateTime(2018, 1, 31, 23, 0, 0, 0, DateTimeKind.Utc)
            });

            Assert.AreEqual(1.0M, cr.Coverage.Value);
            Assert.AreEqual(0, cr.Gaps.Count());

            var dailies = em.GetDailyCompletenessReports(new TimeRange()
            {
                Start = new DateTime(2017, 12, 31, 23, 0, 0, 0, DateTimeKind.Utc),
                End   = new DateTime(2018, 1, 2, 23, 0, 0, 0, DateTimeKind.Utc)
            });

            foreach (var crDaily in dailies)
            {
                Assert.AreEqual(1.0M, crDaily.Value.Coverage.Value, $"error in slice {crDaily.Key}");
            }
            Assert.AreEqual(1.0M, cr.Coverage.Value);
        }
        public void ShowCaseTest()
        {
            var em = new Energiemenge()
            {
                LokationsId      = "DE0123456789012345678901234567890",
                LokationsTyp     = Lokationstyp.MeLo,
                Energieverbrauch = new List <Verbrauch>()
                {
                    new Verbrauch()
                    {
                        Einheit    = Mengeneinheit.KWH,
                        Startdatum = new DateTime(2020, 3, 1, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum   = new DateTime(2020, 3, 8, 0, 0, 0, DateTimeKind.Utc),
                        Wert       = 456.0M,
                        Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG
                    },
                    new Verbrauch()
                    {
                        Einheit    = Mengeneinheit.KWH,
                        Startdatum = new DateTime(2020, 3, 25, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum   = new DateTime(2020, 4, 1, 0, 0, 0, DateTimeKind.Utc),
                        Wert       = 123.0M,
                        Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG
                    }
                }
            };

            var cr = em.GetCompletenessReport();

            Debug.WriteLine($"{nameof(em)} has a coverage of {Decimal.Round(cr.Coverage.Value * 100.0M)}%.");
            // em has a coverage of 45%.

            Debug.WriteLine($"{nameof(em)} has no values for the following intervals: {string.Join(", ", cr.Gaps.Select(g => g.Startdatum.ToString("yyyy-MM-dd") + " to " + g.Enddatum.ToString("yyyy-MM-dd")))}");
            // em has no values for the following intervals: 2020-03-08 to 2020-03-25
        }
        public void TestNullableCoverage()
        {
            Energiemenge em1 = new Energiemenge()
            {
                LokationsId      = "DE123456789DieseEmhatkeineVerbräuche",
                LokationsTyp     = Lokationstyp.MeLo,
                Energieverbrauch = new List <Verbrauch>() //empty list
            };
            CompletenessReport cr1 = em1.GetCompletenessReport();

            Assert.IsNotNull(cr1);
            Assert.IsNull(cr1.Coverage);
            JsonConvert.SerializeObject(cr1); // must _not_ throw exception

            Energiemenge em2 = new Energiemenge()
            {
                LokationsId      = "54321012345DieseEmhatkeineVerbräuche",
                LokationsTyp     = Lokationstyp.MeLo,
                Energieverbrauch = new List <Verbrauch>() //empty list
            };
            CompletenessReport cr2 = em2.GetCompletenessReport(CHRISTMAS_2018, Wertermittlungsverfahren.MESSUNG, "1-2-3-4", Mengeneinheit.KUBIKMETER);

            Assert.IsNotNull(cr2);
            Assert.IsNotNull(cr2.Coverage);   // not null because no values but configuration given
            Assert.AreEqual(0.0M, cr2.Coverage);
            JsonConvert.SerializeObject(cr2); // must _not_ throw exception

            CompletenessReport cr3 = em2.GetCompletenessReport(CHRISTMAS_2018);

            Assert.IsNotNull(cr3);
            Assert.IsNotNull(cr3.Coverage);
            Assert.AreEqual(0.0M, cr3.Coverage);
            JsonConvert.SerializeObject(cr3); // must _not_ throw exception
        }
        public void TestCompletenessReportGenerationSmard()
        {
            MiniProfiler profiler             = MiniProfiler.StartNew(nameof(TestCompletenessReportGenerationSmard));
            IList <CompletenessReport> crlist = new List <CompletenessReport>();

            foreach (string boFile in Directory.GetFiles("Energiemenge/completeness", "50hz_prognose*.json"))
            {
                using (MiniProfiler.Current.Step($"Processing file {boFile}"))
                {
                    JObject json;
                    using (StreamReader r = new StreamReader(boFile))
                    {
                        string jsonString = r.ReadToEnd();
                        json = JsonConvert.DeserializeObject <JObject>(jsonString);
                    }
                    Energiemenge       em = (Energiemenge)BoMapper.MapObject(json, LenientParsing.Strict);
                    CompletenessReport cr = em.GetCompletenessReport();
                    crlist.Add(cr);
                    if (boFile.Contains("onshore.json"))
                    {
                        Assert.IsNotNull(cr.UserProperties);
                        Assert.AreEqual <string>("yippi yippi yeah", cr.UserProperties["meineUp0"].Value <string>());
                        Assert.AreEqual <string>("krawall und remmidemmi", cr.UserProperties["meineUp1"].Value <string>());
                    }
                }
            }
            string resultString = JsonConvert.SerializeObject(crlist, new StringEnumConverter());

            profiler.Stop();
            System.Diagnostics.Debug.WriteLine($"Profiler results: {profiler.RenderPlainText()}");
        }
        public void TestCompletenessReportGenerationSomeCustomer()
        {
            var files = Directory.GetFiles("Energiemenge/completeness", "somecustomer*.json");

            Assert.AreEqual(5, files.Count()); // this is just to make sure the files haven't moved
            foreach (string boFile in files)
            {
                JObject json;
                using (StreamReader r = new StreamReader(boFile))
                {
                    string jsonString = r.ReadToEnd();
                    json = JsonConvert.DeserializeObject <JObject>(jsonString);
                }
                Energiemenge       em = (Energiemenge)BoMapper.MapObject((JObject)json["input"], LenientParsing.Strict);
                CompletenessReport cr;
                if (boFile.EndsWith("somecustomer1.json"))
                {
                    cr = em.GetCompletenessReport();
                    Assert.AreEqual((decimal)0.9601, Math.Round(cr.Coverage.Value, 4));
                    Assert.AreEqual("4-5-6-7", cr.Obiskennzahl);
                    Assert.AreEqual(Wertermittlungsverfahren.MESSUNG, cr.wertermittlungsverfahren);
                    Assert.AreEqual(Mengeneinheit.KWH, cr.Einheit);
                    Assert.AreEqual("DEXXX", cr.LokationsId);
                    //Assert.AreEqual(15, cr.values[0].wert);
                    //Assert.AreEqual(TestEnergiemengeExtension.GERMAN_APRIL_2018.Start, cr.values[0].startdatum);
                    string resultString = JsonConvert.SerializeObject(cr, new StringEnumConverter());

                    Assert.IsNotNull(cr.Gaps);
                    Assert.AreEqual(1, cr.Gaps.Count);
                    Assert.AreEqual(new DateTime(2018, 4, 1, 1, 45, 0, DateTimeKind.Utc), cr.Gaps.First().Startdatum);
                    Assert.AreEqual(new DateTime(2018, 4, 2, 6, 30, 0, DateTimeKind.Utc), cr.Gaps.First().Enddatum);
                }
                else if (boFile.EndsWith("somecustomer2.json"))
                {
                    foreach (var combi in em.GetWevObisMeCombinations())
                    {
                        cr = em.GetCompletenessReport(TestEnergiemengeExtension.GERMAN_APRIL_2018, combi.Item1, combi.Item2, combi.Item3);
                        string             resultString = JsonConvert.SerializeObject(cr, new StringEnumConverter());
                        CompletenessReport cr2          = em.GetCompletenessReport(new CompletenessReport.CompletenessReportConfiguration
                        {
                            Einheit = combi.Item3,
                            Obis    = combi.Item2,
                            Wertermittlungsverfahren = combi.Item1,
                            ReferenceTimeFrame       = new BO4E.COM.Zeitraum
                            {
                                Startdatum = TestEnergiemengeExtension.GERMAN_APRIL_2018.Start,
                                Enddatum   = TestEnergiemengeExtension.GERMAN_APRIL_2018.End
                            }
                        });
                        //Assert.AreEqual(cr, cr2, "calling report with configuration instead of loose parameters doesn't work.");
                    }
                }
                else if (boFile.EndsWith("somecustomer3.json"))
                {
                }
                else if (boFile.EndsWith("somecustomer4.json"))
                {
                }
            }
        }
Exemplo n.º 7
0
        public void TestPlausibilityReportGenerationSomeCustomer()
        {
            foreach (string boFile in Directory.GetFiles("Energiemenge/plausibility", "somecustomer*.json"))
            {
                JObject json;
                using (StreamReader r = new StreamReader(boFile))
                {
                    string jsonString = r.ReadToEnd();
                    json = JsonConvert.DeserializeObject <JObject>(jsonString);
                }
                foreach (var key in new HashSet <string> {
                    "reference", "other", "expectedResult"
                })
                {
                    if (!json.ContainsKey(key))
                    {
                        throw new ArgumentException($"Test file {boFile} has no key '{key}'.");
                    }
                }
                Energiemenge emReference = JsonConvert.DeserializeObject <Energiemenge>(json["reference"].ToString());
                Energiemenge emOther     = JsonConvert.DeserializeObject <Energiemenge>(json["other"].ToString());

                PlausibilityReport prActual   = emReference.GetPlausibilityReport(emOther);
                PlausibilityReport prExpected = JsonConvert.DeserializeObject <PlausibilityReport>(json["expectedResult"].ToString());
                Assert.AreEqual(prExpected, prActual);
            }
        }
        public void TestDetangling()
        {
            Energiemenge em = JsonConvert.DeserializeObject <Energiemenge>("{\"versionStruktur\":1,\"boTyp\":\"ENERGIEMENGE\",\"lokationsId\":\"DE0003604780400000000000012345678\",\"lokationstyp\":\"MeLo\",\"energieverbrauch\":[{\"startdatum\":\"2019-03-01T00:00:00Z\",\"enddatum\":\"2019-06-24T00:00:00Z\",\"wertermittlungsverfahren\":\"MESSUNG\",\"obiskennzahl\":\"1-0:1.8.0\",\"wert\":1,\"einheit\":\"KWH\",\"zaehlernummer\":\"10654212\"},{\"startdatum\":\"2019-03-01T00:00:00Z\",\"enddatum\":\"2019-06-24T00:00:00Z\",\"wertermittlungsverfahren\":\"MESSUNG\",\"obiskennzahl\":\"1-0:2.8.0\",\"wert\":1,\"einheit\":\"KWH\",\"zaehlernummer\":\"10654212\"}],\"anlagennummer\":\"50693510\",\"messlokationsId\":\"DE0003604780400000000000012345678\",\"marktlokationsId\":\"\",\"isMelo\":true,\"zaehlernummer\":\"10654212\"}");

            em.Detangle();
            Assert.AreEqual(2, em.Energieverbrauch.Count);
            // todo: add real test. this one is limited.
        }
Exemplo n.º 9
0
        public void TestUPInclusion()
        {
            string       emString = @"{'versionStruktur':1,'boTyp':'ENERGIEMENGE','lokationsId':'DE0000000000000000000000010000400','lokationstyp':'MeLo','zw':'000000000030000301','anlagennummer':'4000000199','messlokationsId':'DE0000000000000000000000010000400','marktlokationsId':''}";
            Energiemenge em       = JsonConvert.DeserializeObject <Energiemenge>(emString);

            Assert.IsNotNull(em.UserProperties);
            Assert.IsTrue(em.UserProperties.Keys.Count > 0);
            Bo4eUri uri = em.GetURI(true);

            Assert.IsTrue(uri.ToString().Contains("messlokationsId="));
            Assert.IsTrue(uri.ToString().Contains("anlagennummer=4000000199"));
        }
Exemplo n.º 10
0
        public void TestProtobufRoundTrip()
        {
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "54321012345",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MaLo,
                Energieverbrauch = new System.Collections.Generic.List <Verbrauch>()
                {
                    new Verbrauch()
                    {
                        Einheit      = BO4E.ENUM.Mengeneinheit.KWH,
                        Wert         = 10.0M,
                        Startdatum   = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum     = new DateTime(2019, 1, 2, 0, 0, 0, DateTimeKind.Utc),
                        Obiskennzahl = "1�1.8.1"
                    },
                    new Verbrauch()
                    {
                        Einheit      = BO4E.ENUM.Mengeneinheit.MWH,
                        Wert         = 23.0M,
                        Startdatum   = new DateTime(2019, 1, 2, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum     = new DateTime(2019, 1, 3, 0, 0, 0, DateTimeKind.Utc),
                        Obiskennzahl = "1�1.8.1"
                    }
                }
            };

            Assert.IsTrue(em.IsValid(), "Must not serialize invalid Business Objects.");
            string emBase64;

            using (var stream = new MemoryStream())
            {
                Serializer.Serialize <Energiemenge>(stream, em);
                using (var reader = new BinaryReader(stream))
                {
                    emBase64 = Convert.ToBase64String(stream.ToArray());
                }
            }
            Assert.IsFalse(string.IsNullOrWhiteSpace(emBase64));

            // now use base64 string to get back the original energiemenge
            Energiemenge emRoundTrip;

            using (var backStream = new MemoryStream(Convert.FromBase64String(emBase64)))
            {
                backStream.Seek(0, SeekOrigin.Begin);
                emRoundTrip = Serializer.Deserialize <Energiemenge>(backStream);
            }
            Assert.IsNotNull(emRoundTrip.LokationsId);
            Assert.IsTrue(emRoundTrip.IsValid());
            Assert.AreEqual(em, emRoundTrip);
        }
        public void BasicTest()
        {
            Messlokation melo   = new Messlokation();
            var          result = melo.GetJsonScheme().ToString();

            Energiemenge em = new Energiemenge();

            result = em.GetJsonScheme().ToString();

            string result2 = BusinessObject.GetJsonSchema(typeof(Energiemenge)).ToString();

            Assert.AreEqual(result, result2);
        }
Exemplo n.º 12
0
        public void TestAnonymizeEnergiemengeHashing()
        {
            BO4E.StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return(true); });
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "DE0123456789012345678901234567890",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MeLo,
                Energieverbrauch = new List <Verbrauch>()
                {
                    new Verbrauch()
                    {
                        Wert = 123.456M,
                        Wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG,
                        Startdatum   = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum     = new DateTime(2019, 2, 1, 0, 0, 0, DateTimeKind.Utc),
                        Obiskennzahl = "1-2-3-4",
                        Einheit      = BO4E.ENUM.Mengeneinheit.KWH
                    }
                }
            };
            var conf = new AnonymizerConfiguration();

            conf.SetOption(DataCategory.POD, AnonymizerApproach.HASH);
            conf.SetOption(DataCategory.USER_PROPERTIES, AnonymizerApproach.HASH);
            Anonymizer anonymizer = new Anonymizer(conf);
            var        verbrauch2 = JsonConvert.DeserializeObject <Verbrauch>("{\"zw\":\"000000000000485549\",\"startdatum\":\"2018-03-24T01:45:00Z\",\"enddatum\":\"2018-03-24T02:00:00Z\",\"wert\":\"59\",\"status\":\"IU012\",\"obiskennzahl\":\"1-1:2.29.0\",\"wertermittlungsverfahren\":\"MESSUNG\",\"einheit\":\"KWH\"}");

            em.Energieverbrauch.Add(verbrauch2);

            // hash everything
            var result = anonymizer.ApplyOperations <Energiemenge>(em);

            Assert.IsNotNull(result);
            Assert.AreNotEqual(em.LokationsId, result.LokationsId);
            Assert.IsTrue(Messlokation.ValidateId(result.LokationsId));
            Assert.AreEqual(em.Energieverbrauch.Count, result.Energieverbrauch.Count);
            Assert.IsNotNull(result.Energieverbrauch[1].UserProperties["zw"]);
            Assert.AreNotEqual(em.Energieverbrauch[1].UserProperties["zw"].Value <string>(), result.Energieverbrauch[1].UserProperties["zw"].Value <string>());
            Assert.IsTrue(Anonymizer.HasHashedKey(result));

            // do not hash zw user property
            conf.unaffectedUserProperties.Add("zw");
            result = anonymizer.ApplyOperations <Energiemenge>(em);
            Assert.IsNotNull(result);
            Assert.AreNotEqual(em.LokationsId, result.LokationsId);
            Assert.IsTrue(Messlokation.ValidateId(result.LokationsId));
            Assert.AreEqual(em.Energieverbrauch.Count, result.Energieverbrauch.Count);
            Assert.IsNotNull(result.Energieverbrauch[1].UserProperties["zw"]);
            Assert.AreEqual(em.Energieverbrauch[1].UserProperties["zw"].Value <string>(), result.Energieverbrauch[1].UserProperties["zw"].Value <string>());
            Assert.IsTrue(Anonymizer.HasHashedKey(result));
        }
Exemplo n.º 13
0
        public void TestAnonymizeEnergiemengeEncryptionRoundtrip()
        {
            BO4E.StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return(true); });
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "DE0123456789012345678901234567890",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MeLo,
                Energieverbrauch = new List <Verbrauch>()
                {
                    new Verbrauch()
                    {
                        Wert = 123.456M,
                        Wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG,
                        Obiskennzahl             = "1-2-3-4",
                        Einheit = BO4E.ENUM.Mengeneinheit.KWH
                    }
                }
            };

            //ENCRYPTION
            var encConf = new AnonymizerConfiguration();

            encConf.SetOption(DataCategory.POD, AnonymizerApproach.ENCRYPT);
            Energiemenge encryptedEm;

            using (Anonymizer anonymizer = new Anonymizer(encConf))
            {
                X509Certificate2 x509certPubl = new X509Certificate2(X509Certificate2.CreateFromCertFile("anonymizerTests/certificates/publicX509Cert.crt"));
                anonymizer.SetPublicKey(x509certPubl);
                encryptedEm = anonymizer.ApplyOperations <Energiemenge>(em);
            }

            //DECRYPTION
            var decConf = new AnonymizerConfiguration();

            decConf.SetOption(DataCategory.POD, AnonymizerApproach.DECRYPT);
            Energiemenge decryptedEm;

            using (Anonymizer decryptingAnonymizer = new Anonymizer(decConf))
            {
                AsymmetricCipherKeyPair keyPair;
                using (var reader = File.OpenText(@"anonymizerTests/certificates/privateKey.pem")) // file containing RSA PKCS1 private key
                {
                    keyPair = (AsymmetricCipherKeyPair) new PemReader(reader).ReadObject();
                }
                decryptingAnonymizer.SetPrivateKey(keyPair.Private);
                decryptedEm = decryptingAnonymizer.ApplyOperations <Energiemenge>(encryptedEm);
            }
            Assert.AreEqual(em.LokationsId, decryptedEm.LokationsId);
            Assert.IsFalse(Anonymizer.HasHashedKey(em));
        }
Exemplo n.º 14
0
        public void TestBOGuids()
        {
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "DE123456",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MaLo,
                Energieverbrauch = new List <Verbrauch>(),
                guid             = Guid.NewGuid().ToString()
            };

            string jsonString = JsonConvert.SerializeObject(em);

            Assert.AreEqual <string>(em.guid, JsonConvert.DeserializeObject <Energiemenge>(jsonString).guid);
        }
Exemplo n.º 15
0
        public void TestIllegalAdd()
        {
            Energiemenge em1 = new Energiemenge()
            {
                LokationsId  = "DE456",
                LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo
            };
            Energiemenge em2 = new Energiemenge()
            {
                LokationsId  = "DE789",
                LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo
            };

            Assert.ThrowsException <InvalidOperationException>(() => em1 + em2);
        }
Exemplo n.º 16
0
        public void TestProfDecimalsEnergiemengeBug()
        {
            // first test serialization of complete business object
            JObject json;

            using (StreamReader r = new StreamReader("BoMapperTests/energiemenge_profdecimal_em_bug.json"))
            {
                string jsonString = r.ReadToEnd();
                json = JsonConvert.DeserializeObject <JObject>(jsonString);
            }
            Energiemenge em = JsonConvert.DeserializeObject <Energiemenge>(json["input"].ToString(), LenientParsing.MOST_LENIENT.GetJsonSerializerSettings());

            Assert.AreEqual(1.375000M, em.Energieverbrauch.First().Wert);
            Assert.AreEqual(1.2130000M, em.Energieverbrauch.Last().Wert);
        }
Exemplo n.º 17
0
        public void TestSummerTimeBug()
        {
            // first test serialization of complete business object
            JObject json;

            using (StreamReader r = new StreamReader("BoMapperTests/energiemenge_sommerzeit_bug.json"))
            {
                string jsonString = r.ReadToEnd();
                json = JsonConvert.DeserializeObject <JObject>(jsonString);
            }
            Energiemenge em = JsonConvert.DeserializeObject <Energiemenge>(json["input"].ToString(), LenientParsing.MOST_LENIENT.GetJsonSerializerSettings());

            if (TimeZoneInfo.Local == CentralEuropeStandardTime.CENTRAL_EUROPE_STANDARD_TIME)
            {
                Assert.AreEqual(2, em.Energieverbrauch.Count); // weil 2 verschiedene status
            }
        }
Exemplo n.º 18
0
        public void TestProfDecimalsVerbrauchBug()
        {
            // first test serialization of complete business object
            JObject json;

            using (StreamReader r = new StreamReader("BoMapperTests/energiemenge_profdecimal_verbrauch_bug.json"))
            {
                string jsonString = r.ReadToEnd();
                json = JsonConvert.DeserializeObject <JObject>(jsonString);
            }
            Energiemenge em = JsonConvert.DeserializeObject <Energiemenge>(json["input"].ToString(), LenientParsing.MOST_LENIENT.GetJsonSerializerSettings());

            Assert.AreEqual(4, em.Energieverbrauch.Count);
            Assert.AreEqual(59.0M, em.Energieverbrauch[0].Wert);
            Assert.AreEqual(58.0M, em.Energieverbrauch[1].Wert);
            Assert.AreEqual(57.0M, em.Energieverbrauch[2].Wert);
            Assert.AreEqual(57.123M, em.Energieverbrauch[3].Wert);
        }
 public void TestDailyCompleteness()
 {
     foreach (string boFile in Directory.GetFiles("Energiemenge/completeness/", "50hz_prognose*.json"))
     {
         using (MiniProfiler.Current.Step($"Processing file {boFile}"))
         {
             JObject json;
             using (StreamReader r = new StreamReader(boFile))
             {
                 string jsonString = r.ReadToEnd();
                 json = JsonConvert.DeserializeObject <JObject>(jsonString);
             }
             Energiemenge em     = BoMapper.MapObject <Energiemenge>(json, LenientParsing.Strict);
             var          result = em.GetDailyCompletenessReports(CHRISTMAS_2018);
             Assert.AreEqual(8, result.Count);
             break; // one test is enough. the rest is covered by the individual completeness report tests.
         }
     }
 }
        public void ShowCaseTest()
        {
            var em = new Energiemenge()
            {
                LokationsId      = "DE0123456789012345678901234567890",
                LokationsTyp     = Lokationstyp.MeLo,
                Energieverbrauch = new List <Verbrauch>()
                {
                    new Verbrauch()
                    {
                        Einheit    = Mengeneinheit.KWH,
                        Startdatum = new DateTime(2020, 3, 1, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum   = new DateTime(2020, 3, 8, 0, 0, 0, DateTimeKind.Utc),
                        Wert       = 456.0M,
                        Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG
                    },
                    new Verbrauch()
                    {
                        Einheit    = Mengeneinheit.KWH,
                        Startdatum = new DateTime(2020, 3, 25, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum   = new DateTime(2020, 4, 1, 0, 0, 0, DateTimeKind.Utc),
                        Wert       = 123.0M,
                        Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG
                    }
                }
            };

            Debug.WriteLine($"You got Verbrauch data for {Decimal.Round(em.GetCoverage() * 100.0M)}% of the time in between {em.Energieverbrauch.Select(v => v.Startdatum).Min().ToString("yyyy-MM-dd")} and {em.Energieverbrauch.Select(v => v.Enddatum).Max().ToString("yyyy-MM-dd")}");
            // You got Verbrauch data for 45% of the time in between 2020-03-01 and 2020-04-01

            var consumption = em.GetTotalConsumption();

            Debug.WriteLine($"The total consumption is {consumption.Item1}{consumption.Item2}");
            // The total consumption is 579,0KWH

            var consumptionMarch7 = em.GetConsumption(new TimeRange(start: new DateTimeOffset(2020, 3, 7, 0, 0, 0, TimeSpan.Zero).UtcDateTime, end: new DateTimeOffset(2020, 3, 8, 0, 0, 0, TimeSpan.Zero).UtcDateTime));

            Debug.WriteLine($"The total consumption on March 7 is {Decimal.Round(consumptionMarch7.Item1)}{consumptionMarch7.Item2}");
            // The total consumption on March 7 is 65KWH

            // ToDo: show other methods.
        }
Exemplo n.º 21
0
        public void TestSimpleAdd()
        {
            Energiemenge em1 = new Energiemenge()
            {
                LokationsId      = "DE123",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MaLo,
                Energieverbrauch = new List <BO4E.COM.Verbrauch>()
                {
                    new BO4E.COM.Verbrauch()
                    {
                        Einheit                  = BO4E.ENUM.Mengeneinheit.ANZAHL,
                        Obiskennzahl             = "1-2-3",
                        Enddatum                 = new DateTime(),
                        Startdatum               = new DateTime(),
                        Wert                     = (decimal)123.456,
                        Wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.PROGNOSE
                    }
                }
            };
            Energiemenge em2 = new Energiemenge()
            {
                LokationsId      = "DE123",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MaLo,
                Energieverbrauch = new List <BO4E.COM.Verbrauch>()
                {
                    new BO4E.COM.Verbrauch()
                    {
                        Einheit                  = BO4E.ENUM.Mengeneinheit.ANZAHL,
                        Obiskennzahl             = "4-5-6",
                        Enddatum                 = new DateTime(),
                        Startdatum               = new DateTime(),
                        Wert                     = (decimal)123.456,
                        Wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.PROGNOSE
                    }
                }
            };
            Energiemenge result = em1 + em2;

            Assert.IsNotNull(result);
            Assert.AreEqual(2, result.Energieverbrauch.Count);
        }
Exemplo n.º 22
0
        public void TestSameHashDifferentObjectTypes()
        {
            BO4E.StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return(true); });
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "DE0123456789012345678901234567890",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MeLo,
                Energieverbrauch = new List <Verbrauch>()
                {
                    new Verbrauch()
                    {
                        Wert = 123.456M,
                        Wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG,
                        Startdatum   = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc),
                        Enddatum     = new DateTime(2019, 2, 1, 0, 0, 0, DateTimeKind.Utc),
                        Obiskennzahl = "1-2-3-4",
                        Einheit      = BO4E.ENUM.Mengeneinheit.KWH
                    }
                }
            };

            Assert.IsTrue(em.IsValid());

            Messlokation melo = new Messlokation()
            {
                MesslokationsId = "DE0123456789012345678901234567890"
            };

            Assert.IsTrue(melo.IsValid());

            var conf = new AnonymizerConfiguration();

            conf.SetOption(DataCategory.POD, AnonymizerApproach.HASH);

            using Anonymizer anonymizer = new Anonymizer(conf);
            var hashedEm   = anonymizer.ApplyOperations <Energiemenge>(em);
            var hashedMelo = anonymizer.ApplyOperations <Messlokation>(melo);

            Assert.AreEqual(hashedEm.LokationsId, hashedMelo.MesslokationsId);
        }
        public void TestDailyParallization()
        {
            //Energiemenge em ;
            //using (StreamReader r = new StreamReader(Directory.GetFiles("BusinessObjectExtensions/Energiemenge/completeness", "threeyears.json").First()))
            //{
            //    string jsonString = r.ReadToEnd();
            //    em = JsonConvert.DeserializeObject<Energiemenge>(jsonString);
            //}
            Energiemenge     em       = new Energiemenge();
            DateTime         dateTime = DateTime.Parse("2015-01-31 22:45:00");
            List <Verbrauch> listvb   = new List <Verbrauch>();

            for (int u = 0; u < 1500; u++)
            {
                dateTime = dateTime.AddMinutes(15);
                DateTime endDateTime = dateTime.AddMinutes(15);

                listvb.Add(new Verbrauch()
                {
                    Startdatum = dateTime, Enddatum = endDateTime, Einheit = Mengeneinheit.JAHR, Wert = 12
                });
                dateTime = endDateTime;
            }
            em.Energieverbrauch = listvb;

            MiniProfiler mpLinear = MiniProfiler.StartNew("Non-Parallel");

            em.GetMonthlyCompletenessReports(new TimeRange(new DateTime(2015, 1, 1, 23, 00, 0, DateTimeKind.Utc), new DateTime(2019, 12, 31, 23, 0, 0, DateTimeKind.Utc)), useParallelExecution: false);
            mpLinear.Stop();
            Console.Out.Write(mpLinear.RenderPlainText());
            //Assert.IsTrue(mpLinear.DurationMilliseconds < 4000, $"Linear completeness report generation was too slow. Expected less than 4 seconds but was {mpLinear.DurationMilliseconds}ms: {mpLinear.RenderPlainText()}");

            MiniProfiler mpParallel = MiniProfiler.StartNew("Parallel");

            em.GetDailyCompletenessReports(new TimeRange(new DateTime(2015, 1, 01, 23, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 31, 23, 0, 0, DateTimeKind.Utc)), useParallelExecution: true);
            mpParallel.Stop();
            Console.Out.Write(mpParallel.RenderPlainText());
            //Assert.IsTrue(mpParallel.DurationMilliseconds < 3000, $"Parallel completeness report generation was too slow. Expected less than 3 seconds but was {mpParallel.DurationMilliseconds}ms: {mpParallel.RenderPlainText()}");
            //Assert.IsTrue(mpParallel.DurationMilliseconds < (int)mpLinear.DurationMilliseconds * 1.25M, $"Parallel: {mpParallel.DurationMilliseconds}, Non-Parallel: {mpLinear.DurationMilliseconds}");
        }
Exemplo n.º 24
0
        public void TestCloningEnergiemenge()
        {
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "De12345",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MaLo,
                Energieverbrauch = new List <BO4E.COM.Verbrauch>()
                {
                    new BO4E.COM.Verbrauch()
                    {
                        Einheit                  = BO4E.ENUM.Mengeneinheit.KWH,
                        Wert                     = 123.456M,
                        Obiskennzahl             = "dei vadder",
                        Wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG,
                        Startdatum               = new System.DateTime(2018, 12, 31, 23, 0, 0, 0, System.DateTimeKind.Utc),
                        Enddatum                 = new System.DateTime(2019, 12, 31, 23, 0, 0, 0, System.DateTimeKind.Utc)
                    },
                    new BO4E.COM.Verbrauch()
                    {
                        Einheit                  = BO4E.ENUM.Mengeneinheit.KWH,
                        Wert                     = 789.123M,
                        Obiskennzahl             = "dei mudder",
                        Wertermittlungsverfahren = BO4E.ENUM.Wertermittlungsverfahren.MESSUNG,
                        Startdatum               = new System.DateTime(2019, 12, 31, 23, 0, 0, 0, System.DateTimeKind.Utc),
                        Enddatum                 = new System.DateTime(2020, 12, 31, 23, 0, 0, 0, System.DateTimeKind.Utc)
                    }
                }
            };
            var cloned = em.DeepClone <Energiemenge>();

            Assert.AreEqual(em.Energieverbrauch.Count, cloned.Energieverbrauch.Count);

            var cloned2 = em.DeepClone();

            Assert.AreEqual(em.Energieverbrauch.Count, cloned2.Energieverbrauch.Count);

            var cloned3 = (em as BusinessObject).DeepClone();

            Assert.AreEqual(em.Energieverbrauch.Count, (cloned3 as Energiemenge).Energieverbrauch.Count);
        }
 internal void TestMonthlySlices(bool testFirstOnly = true, bool useParallelExecution = false)
 {
     foreach (string boFile in Directory.GetFiles("Energiemenge/completeness", "50hz_prognose*.json"))
     {
         using (MiniProfiler.Current.Step($"Processing file {boFile} with parallel={useParallelExecution}"))
         {
             JObject json;
             using (StreamReader r = new StreamReader(boFile))
             {
                 string jsonString = r.ReadToEnd();
                 json = JsonConvert.DeserializeObject <JObject>(jsonString);
             }
             Energiemenge em     = BoMapper.MapObject <Energiemenge>(json, LenientParsing.Strict);
             var          result = em.GetMonthlyCompletenessReports(GERMAN_YEAR_2018, useParallelExecution: useParallelExecution);
             Assert.AreEqual(12, result.Count); // don't care about values of coverage, just the start/end and count of reports generated.
             if (testFirstOnly)
             {
                 break; // one test is enough. the rest is covered by the individual completeness report tests
             }
         }
     }
 }
Exemplo n.º 26
0
        public void TestHashingDetectionForNonconformingString()
        {
            BO4E.StaticLogger.Logger = new Microsoft.Extensions.Logging.Debug.DebugLogger("Testlogger", (log, level) => { return(true); });
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "asdkasldkmaslkdmas", // not identifyable as lokationsId
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MeLo,
                Energieverbrauch = new List <Verbrauch>()
            };

            Assert.IsFalse(Anonymizer.HasHashedKey(em));

            var hashConf = new AnonymizerConfiguration();

            hashConf.SetOption(DataCategory.POD, AnonymizerApproach.HASH);
            Energiemenge hashedEm;

            using (var a = new Anonymizer(hashConf))
            {
                hashedEm = a.ApplyOperations <Energiemenge>(em);
            }
            Assert.IsTrue(Anonymizer.HasHashedKey(hashedEm));
        }
Exemplo n.º 27
0
        public void TestBOGuids()
        {
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "DE123456",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MaLo,
                Energieverbrauch = new List <Verbrauch>(),
                Guid             = Guid.NewGuid()
            };

            string emJson = JsonConvert.SerializeObject(em);

            Assert.AreEqual <Guid>(em.Guid.Value, JsonConvert.DeserializeObject <Energiemenge>(emJson).Guid.Value);

            Geschaeftspartner gp = new Geschaeftspartner()
            {
                Gewerbekennzeichnung = true,
                Guid = Guid.NewGuid()
            };

            string gpJson = JsonConvert.SerializeObject(gp);

            Assert.AreEqual <Guid>(gp.Guid.Value, JsonConvert.DeserializeObject <Geschaeftspartner>(gpJson).Guid.Value);
        }
Exemplo n.º 28
0
 /// <summary>
 /// check if an Energiemenge been pseudonymized using <see cref="AnonymizerApproach.HASH"/>.
 /// Calls <see cref="IsHashedKey(string)"/> for <see cref="Energiemenge.LokationsId"/>.
 /// </summary>
 /// <param name="em">Energiemenge</param>
 /// <returns>true if the <see cref="Energiemenge.LokationsId"/> fulfills the requirements of a hashed key</returns>
 public static bool HasHashedKey(Energiemenge em)
 {
     return(IsHashedKey(em.LokationsId));
 }
Exemplo n.º 29
0
        public void TestEqualsBO()
        {
            Energiemenge em1 = new Energiemenge();
            Energiemenge em2 = new Energiemenge();

            Assert.ThrowsException <ArgumentException>(() => em1.Equals(em2));
            Assert.AreEqual(em1.GetHashCode(), em2.GetHashCode());

            em1.LokationsId = "DE1234";
            em2.LokationsId = "DE1234";

            em1.LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo;
            em2.LokationsTyp = BO4E.ENUM.Lokationstyp.MeLo;

            em1.Energieverbrauch = new List <Verbrauch>();
            Verbrauch v1 = new Verbrauch
            {
                Obiskennzahl = "1-2-3-4-5"
            };

            em1.Energieverbrauch.Add(v1);
            em2.Energieverbrauch = new List <Verbrauch>();
            Verbrauch v2 = new Verbrauch
            {
                Obiskennzahl = "1-2-3-4-5"
            };

            em2.Energieverbrauch.Add(v2);

            Assert.AreEqual(em1, em2);
            //Assert.AreEqual(em1.GetHashCode(), em2.GetHashCode());
            Assert.IsFalse(em1 == em2);

            Verbrauch v3 = new Verbrauch
            {
                Einheit      = BO4E.ENUM.Mengeneinheit.KWH,
                Obiskennzahl = "ABC",
                Startdatum   = new DateTime(2018, 1, 1),
                Enddatum     = new DateTime(2018, 12, 31),
                Wert         = 123.456M
            };

            em1.Energieverbrauch = new List <Verbrauch> {
                v3
            };
            em2.Energieverbrauch = new List <Verbrauch> {
                v3
            };
            Assert.AreEqual(em1, em2);
            //Assert.AreEqual(em1.GetHashCode(), em2.GetHashCode());
            Assert.IsFalse(em1 == em2);

            Verbrauch v4 = JsonConvert.DeserializeObject <Verbrauch>(JsonConvert.SerializeObject(v1));

            v4.Wert = 789.012M;
            em1.Energieverbrauch.Add(v4);
            Assert.AreNotEqual(em1, em2);

            em2.Energieverbrauch.Add(v4);
            Assert.AreEqual(em1, em2);

            em1.Energieverbrauch = new List <Verbrauch> {
                v3, v4
            };
            em2.Energieverbrauch = new List <Verbrauch> {
                v4, v3
            };

            Assert.AreNotEqual(em1, em2);
            //Assert.AreNotEqual(em1.GetHashCode(), em2.GetHashCode());
        }
        public void TestDailyCompletenessDST()
        {
            var localStart = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2018, 3, 24, 23, 0, 0, DateTimeKind.Utc), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); //, DateTimeKind.Unspecified);
            var localEnd   = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2018, 3, 26, 22, 0, 0, DateTimeKind.Utc), Verbrauch.CENTRAL_EUROPE_STANDARD_TIME); //, DateTimeKind.Unspecified);

            if (TimeZoneInfo.Local != Verbrauch.CENTRAL_EUROPE_STANDARD_TIME)
            {
                localStart = DateTime.SpecifyKind(TimeZoneInfo.ConvertTime(localStart, TimeZoneInfo.Local, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME), DateTimeKind.Unspecified);
                localEnd   = DateTime.SpecifyKind(TimeZoneInfo.ConvertTime(localEnd, TimeZoneInfo.Local, Verbrauch.CENTRAL_EUROPE_STANDARD_TIME), DateTimeKind.Unspecified);
            }
            else
            {
                localStart = DateTime.SpecifyKind(localStart, DateTimeKind.Unspecified);
                localEnd   = DateTime.SpecifyKind(localEnd, DateTimeKind.Unspecified);
            }
            var utcStart = new DateTime(2018, 3, 24, 23, 0, 0, DateTimeKind.Utc);
            var utcEnd   = new DateTime(2018, 3, 26, 22, 0, 0, DateTimeKind.Utc);

            if (TimeZoneInfo.Local.SupportsDaylightSavingTime && Verbrauch.CENTRAL_EUROPE_STANDARD_TIME == TimeZoneInfo.Local)
            {
                Assert.IsFalse(Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(localStart));
                Assert.IsTrue(Verbrauch.CENTRAL_EUROPE_STANDARD_TIME.IsDaylightSavingTime(localEnd));
            }

            var verbrauchSlices = new List <TimeRange>()
            {
                new TimeRange()
                {
                    Start = utcStart,
                    End   = utcStart.AddHours(1)
                }
            };

            while (verbrauchSlices.Last().End < utcEnd)
            {
                verbrauchSlices.Add(new TimeRange()
                {
                    Start = verbrauchSlices.Last().Start.AddHours(1),
                    End   = verbrauchSlices.Last().End.AddHours(1),
                });
            }
            Assert.AreEqual(2 * 24 - 1, verbrauchSlices.Count);
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "MeinUnitTest123",
                LokationsTyp     = Lokationstyp.MeLo,
                Energieverbrauch = verbrauchSlices.Select(vs => new BO4E.COM.Verbrauch()
                {
                    Startdatum = vs.Start,
                    Enddatum   = vs.End,
                    Einheit    = Mengeneinheit.KWH,
                    Wert       = (decimal)123.456,
                    Wertermittlungsverfahren = Wertermittlungsverfahren.MESSUNG
                }
                                                          ).ToList()
            };
            var result = em.GetDailyCompletenessReports(new TimeRange(utcStart, utcEnd));

            Assert.AreEqual(2, result.Count);
            Assert.AreEqual(new DateTime(2018, 3, 24, 23, 0, 0, DateTimeKind.Utc), result.First().Value.ReferenceTimeFrame.Startdatum);
            Assert.AreEqual(new DateTime(2018, 3, 25, 22, 0, 0, DateTimeKind.Utc), result.First().Value.ReferenceTimeFrame.Enddatum);
            Assert.AreEqual(new DateTime(2018, 3, 25, 22, 0, 0, DateTimeKind.Utc), result.Last().Value.ReferenceTimeFrame.Startdatum);
            Assert.AreEqual(new DateTime(2018, 3, 26, 22, 0, 0, DateTimeKind.Utc), result.Last().Value.ReferenceTimeFrame.Enddatum);
        }