public void TestDStreamMapWithStateUpdateStateHelper() { var ticks = DateTime.UtcNow.Ticks; var helper = new UpdateStateHelper <string, int, int, int>( (k, v, state) => { if (v < 0 && state.Exists()) { state.Remove(); } else if (!state.IsTimingOut()) { state.Update(v + state.Get()); } return(v); }, ticks, true, TimeSpan.FromSeconds(10)); var input = new dynamic[4]; var preStateRddRecord = new MapWithStateRDDRecord <string, int, int>(ticks - TimeSpan.FromSeconds(2).Ticks, new [] { new KeyValuePair <string, int>("1", 1), new KeyValuePair <string, int>("2", 2) }); preStateRddRecord.stateMap.Add("expired", new KeyedState <int>(0, ticks - TimeSpan.FromSeconds(60).Ticks)); input[0] = preStateRddRecord; input[1] = new KeyValuePair <string, int>("1", -1); input[2] = new KeyValuePair <string, int>("2", 2); input[3] = new KeyValuePair <string, int>("3", 3); var result = helper.Execute(1, input).GetEnumerator(); Assert.IsNotNull(result); Assert.IsTrue(result.MoveNext()); MapWithStateRDDRecord <string, int, int> stateRddRecord = result.Current; Assert.IsNotNull(stateRddRecord); Assert.AreEqual(stateRddRecord.mappedData.Count, 4); // timedout record also appears in return results Assert.AreEqual(stateRddRecord.stateMap.Count, 2); }
public void TestDStreamMapWithStateUpdateStateHelper() { var ticks = DateTime.UtcNow.Ticks; var helper = new UpdateStateHelper<string, int, int, int>( (k, v, state) => { if (v < 0 && state.Exists()) { state.Remove(); } else if(!state.IsTimingOut()) { state.Update(v + state.Get()); } return v; }, ticks, true, TimeSpan.FromSeconds(10)); var input = new dynamic[4]; var preStateRddRecord = new MapWithStateRDDRecord<string, int, int>(ticks - TimeSpan.FromSeconds(2).Ticks, new [] { new KeyValuePair<string, int>("1", 1), new KeyValuePair<string, int>("2", 2)}); preStateRddRecord.stateMap.Add("expired", new KeyedState<int>(0, ticks - TimeSpan.FromSeconds(60).Ticks)); input[0] = preStateRddRecord; input[1] = new KeyValuePair<string, int>("1", -1); input[2] = new KeyValuePair<string, int>("2", 2); input[3] = new KeyValuePair<string, int>("3", 3); var result = helper.Execute(1, input).GetEnumerator(); Assert.IsNotNull(result); Assert.IsTrue(result.MoveNext()); MapWithStateRDDRecord<string, int, int> stateRddRecord = result.Current; Assert.IsNotNull(stateRddRecord); Assert.AreEqual(stateRddRecord.mappedData.Count, 4); // timedout record also appears in return results Assert.AreEqual(stateRddRecord.stateMap.Count, 2); }