Skip to content

Commit

Permalink
Unit Test DB
Browse files Browse the repository at this point in the history
  • Loading branch information
bassmaster187 committed Jan 9, 2025
1 parent cdf35ac commit b3969be
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 4 deletions.
2 changes: 1 addition & 1 deletion TeslaLogger/Car.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ internal enum HFLMode

private static List<Car> allcars = new List<Car>();

private DBHelper dbHelper;
internal DBHelper dbHelper;

internal readonly TeslaAPIState teslaAPIState;

Expand Down
2 changes: 1 addition & 1 deletion TeslaLogger/DBHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5247,7 +5247,7 @@ datum DESC
return 0;
}

private int GetMaxChargingstateId(out double lat, out double lng, out DateTime UnplugDate, out DateTime EndDate)
internal int GetMaxChargingstateId(out double lat, out double lng, out DateTime UnplugDate, out DateTime EndDate)
{
UnplugDate = DateTime.MinValue;
EndDate = DateTime.MinValue;
Expand Down
155 changes: 155 additions & 0 deletions UnitTestsTeslalogger/UnitTestDB.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using TeslaLogger;
using MySql.Data.MySqlClient;
using System.Data;
using System.Runtime.ConstrainedExecution;

namespace UnitTestsTeslalogger
{
[TestClass]
public class UnitTestDB
{
[ClassInitialize]
public static void ClassInit(TestContext context)
{
// Einmalige Initialisierung für alle Tests in der Klasse
Program.VERBOSE = true;

Car c = new Car(0, "", "", 0, "", DateTime.Now, "", "", "", "", "", "", "", null, false);
c.Log("Update DBSchema!");

UpdateTeslalogger.Start();

while (UpdateTeslalogger.Done == false)
{
System.Threading.Thread.Sleep(100);
}
c.Log("Update done!");

}

[TestInitialize]
public void TestInit()
{
DBHelper.ExecuteSQLQuery("DELETE FROM chargingstate where carid = 0");
DBHelper.ExecuteSQLQuery("DELETE FROM charging where carid = 0");
}

[TestMethod]
public void CheckCombineCharging1()
{
Program.VERBOSE = true;
DBHelper.ExecuteSQLQuery("DELETE FROM chargingstate where carid = 0");
DBHelper.ExecuteSQLQuery("DELETE FROM charging where carid = 0");

Car c = new Car(0, "", "", 0, "", DateTime.Now, "", "", "", "", "", "", "", null, false);

var dt = new DateTime(2024, 1, 5);

c.dbHelper.InsertPos(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt).ToString(), 48.1850756, 9.9016996, 0, 0, 1000, 100, 100, 30, 10, null);

c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddSeconds(10)).ToString(), "30", "0", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.StartChargingState(c.webhelper);

Console.WriteLine("ChargingStateID: " + c.dbHelper.GetMaxChargingstateId(out _, out _, out _, out _));


c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(10)).ToString(), "32", "2", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(20)).ToString(), "34", "4", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(30)).ToString(), "36", "5", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(40)).ToString(), "37", "6", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.CloseChargingStates();

DataTable dt2 = GetChargingstates();

Assert.AreEqual(dt2.Rows.Count, 1);
Assert.AreEqual(6.0, dt2.Rows[0]["charge_energy_added"]);
Assert.AreEqual(dt.AddSeconds(10), dt2.Rows[0]["StartDate"]);
Assert.AreEqual(dt.AddMinutes(40), dt2.Rows[0]["EndDate"]);

c.dbHelper.InsertPos(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(60)).ToString(), 48.1850756, 9.9016996, 0, 0, 1000, 100, 100, 30, 10, null); // same pos and same odometer
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(61)).ToString(), "30", "0", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.StartChargingState(c.webhelper);
Console.WriteLine("ChargingStateID: " + c.dbHelper.GetMaxChargingstateId(out _, out _, out _, out _));


c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(70)).ToString(), "32", "2", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(80)).ToString(), "34", "4", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(90)).ToString(), "36", "5", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(100)).ToString(), "37", "7", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.CloseChargingStates();

DataTable dt3 = GetChargingstates();

Assert.AreEqual(dt3.Rows.Count, 1);
Assert.AreEqual(13.0, dt3.Rows[0]["charge_energy_added"]);
Assert.AreEqual(dt.AddSeconds(10), dt3.Rows[0]["StartDate"]);
Assert.AreEqual(dt.AddMinutes(100), dt3.Rows[0]["EndDate"]);
}

[TestMethod]
public void CheckCombineCharging2_nocombine()
{
Program.VERBOSE = true;
DBHelper.ExecuteSQLQuery("DELETE FROM chargingstate where carid = 0");
DBHelper.ExecuteSQLQuery("DELETE FROM charging where carid = 0");

Car c = new Car(0, "", "", 0, "", DateTime.Now, "", "", "", "", "", "", "", null, false);

var dt = new DateTime(2024, 1, 5);

c.dbHelper.InsertPos(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt).ToString(), 48.1850756, 9.9016996, 0, 0, 1000, 100, 100, 30, 10, null);

c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddSeconds(10)).ToString(), "30", "0", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.StartChargingState(c.webhelper);

Console.WriteLine("ChargingStateID: " + c.dbHelper.GetMaxChargingstateId(out _, out _, out _, out _));


c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(10)).ToString(), "32", "2", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(20)).ToString(), "34", "4", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(30)).ToString(), "36", "5", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(40)).ToString(), "37", "6", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.CloseChargingStates();

DataTable dt2 = GetChargingstates();

Assert.AreEqual(dt2.Rows.Count, 1);
Assert.AreEqual(6.0, dt2.Rows[0]["charge_energy_added"]);
Assert.AreEqual(dt.AddSeconds(10), dt2.Rows[0]["StartDate"]);
Assert.AreEqual(dt.AddMinutes(40), dt2.Rows[0]["EndDate"]);

c.dbHelper.InsertPos(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(60)).ToString(), 48.1850756, 9.9016996, 0, 0, 1001, 100, 100, 30, 10, null); // different odometer
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(61)).ToString(), "30", "0", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.StartChargingState(c.webhelper);
Console.WriteLine("ChargingStateID: " + c.dbHelper.GetMaxChargingstateId(out _, out _, out _, out _));


c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(70)).ToString(), "32", "2", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(80)).ToString(), "34", "4", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(90)).ToString(), "36", "5", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.InsertCharging(TelemetryParser.DateTimeToUTC_UnixTimestamp(dt.AddMinutes(100)).ToString(), "37", "7", "11", 100, 100, "240", "2", "16", null, true, "16", "16");
c.dbHelper.CloseChargingStates();

DataTable dt3 = GetChargingstates();

Assert.AreEqual(2, dt3.Rows.Count);
Assert.AreEqual(6.0, dt3.Rows[0]["charge_energy_added"]);
Assert.AreEqual(dt.AddSeconds(10), dt3.Rows[0]["StartDate"]);
Assert.AreEqual(dt.AddMinutes(40), dt3.Rows[0]["EndDate"]);

Assert.AreEqual(7.0, dt3.Rows[1]["charge_energy_added"]);
Assert.AreEqual(dt.AddMinutes(61), dt3.Rows[1]["StartDate"]); // Start Date from charging (not from pos!)
Assert.AreEqual(dt.AddMinutes(100), dt3.Rows[1]["EndDate"]);
}

private static DataTable GetChargingstates()
{
var da = new MySqlDataAdapter("SELECT * FROM chargingstate where carid = 0 order by id", DBHelper.DBConnectionstring);
System.Data.DataTable dt2 = new System.Data.DataTable();
da.Fill(dt2);
return dt2;
}
}
}
2 changes: 1 addition & 1 deletion UnitTestsTeslalogger/app.config
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IO.RecyclableMemoryStream" publicKeyToken="31bf3856ad364e35" culture="neutral" />
Expand Down
13 changes: 12 additions & 1 deletion UnitTestsTeslalogger/packages.config
Original file line number Diff line number Diff line change
@@ -1,16 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BouncyCastle.Cryptography" version="2.2.1" targetFramework="net48" />
<package id="Exceptionless" version="6.0.3" targetFramework="net48" />
<package id="Google.Protobuf" version="3.21.9" targetFramework="net48" />
<package id="K4os.Compression.LZ4" version="1.3.5" targetFramework="net48" />
<package id="K4os.Compression.LZ4.Streams" version="1.3.5" targetFramework="net48" />
<package id="K4os.Hash.xxHash" version="1.0.8" targetFramework="net48" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="5.0.0" targetFramework="net48" />
<package id="MSTest.TestAdapter" version="2.2.8" targetFramework="net452" />
<package id="MSTest.TestFramework" version="2.2.8" targetFramework="net452" />
<package id="MySql.Data" version="8.2.0" targetFramework="net48" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net452" />
<package id="Selenium.WebDriver" version="4.1.0" targetFramework="net452" requireReinstallation="true" />
<package id="Selenium.WebDriver.ChromeDriver" version="98.0.4758.10200" targetFramework="net452" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Collections.Immutable" version="6.0.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.4" targetFramework="net48" />
<package id="System.Configuration.ConfigurationManager" version="4.4.1" targetFramework="net48" />
<package id="System.Diagnostics.DiagnosticSource" version="7.0.2" targetFramework="net48" />
<package id="System.IO.Pipelines" version="5.0.2" targetFramework="net48" />
<package id="System.Memory" version="4.5.5" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Reflection.Metadata" version="6.0.1" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
<package id="ZstdSharp.Port" version="0.7.1" targetFramework="net48" />
</packages>

0 comments on commit b3969be

Please sign in to comment.