diff --git a/infra/lmxfakeproxy/tests/LmxFakeProxy.Tests/IntegrationSmokeTest.cs b/infra/lmxfakeproxy/tests/LmxFakeProxy.Tests/IntegrationSmokeTest.cs
new file mode 100644
index 0000000..4948cd2
--- /dev/null
+++ b/infra/lmxfakeproxy/tests/LmxFakeProxy.Tests/IntegrationSmokeTest.cs
@@ -0,0 +1,64 @@
+using ScadaLink.DataConnectionLayer.Adapters;
+
+namespace LmxFakeProxy.Tests;
+
+///
+/// End-to-end smoke test connecting RealLmxProxyClient to LmxFakeProxy.
+/// Requires both OPC UA test server and LmxFakeProxy to be running.
+/// Run manually: dotnet test --filter "Category=Integration"
+///
+[Trait("Category", "Integration")]
+public class IntegrationSmokeTest
+{
+ private const string Host = "localhost";
+ private const int Port = 50051;
+
+ [Fact]
+ public async Task ConnectReadWriteSubscribe_EndToEnd()
+ {
+ var factory = new RealLmxProxyClientFactory();
+ var client = factory.Create(Host, Port, null);
+
+ try
+ {
+ // Connect
+ await client.ConnectAsync();
+ Assert.True(client.IsConnected);
+
+ // Read initial value
+ var vtq = await client.ReadAsync("Motor.Speed");
+ Assert.Equal(LmxQuality.Good, vtq.Quality);
+
+ // Write a value
+ await client.WriteAsync("Motor.Speed", 42.5);
+
+ // Read back
+ var vtq2 = await client.ReadAsync("Motor.Speed");
+ Assert.Equal(42.5, (double)vtq2.Value!);
+
+ // ReadBatch
+ var batch = await client.ReadBatchAsync(new[] { "Motor.Speed", "Pump.FlowRate" });
+ Assert.Equal(2, batch.Count);
+
+ // Subscribe briefly
+ LmxVtq? lastUpdate = null;
+ var sub = await client.SubscribeAsync(
+ new[] { "Motor.Speed" },
+ (tag, v) => lastUpdate = v);
+
+ // Write to trigger subscription update
+ await client.WriteAsync("Motor.Speed", 99.0);
+ await Task.Delay(2000);
+
+ await sub.DisposeAsync();
+ Assert.NotNull(lastUpdate);
+
+ // Disconnect
+ await client.DisconnectAsync();
+ }
+ finally
+ {
+ await client.DisposeAsync();
+ }
+ }
+}
diff --git a/infra/lmxfakeproxy/tests/LmxFakeProxy.Tests/LmxFakeProxy.Tests.csproj b/infra/lmxfakeproxy/tests/LmxFakeProxy.Tests/LmxFakeProxy.Tests.csproj
index a17b68a..398e4f0 100644
--- a/infra/lmxfakeproxy/tests/LmxFakeProxy.Tests/LmxFakeProxy.Tests.csproj
+++ b/infra/lmxfakeproxy/tests/LmxFakeProxy.Tests/LmxFakeProxy.Tests.csproj
@@ -17,5 +17,6 @@
+