public void GrainReference_Test1() { Guid guid = Guid.NewGuid(); GrainId regularGrainId = GrainId.GetGrainIdForTesting(guid); GrainReference grainRef = this.environment.InternalGrainFactory.GetGrain(regularGrainId); TestGrainReference(grainRef); grainRef = GrainReference.FromGrainId(regularGrainId, null, "generic"); TestGrainReference(grainRef); GrainId systemTragetGrainId = GrainId.NewSystemTargetGrainIdByTypeCode(2); grainRef = GrainReference.FromGrainId(systemTragetGrainId, null, null, SiloAddress.NewLocalAddress(1)); this.environment.GrainFactory.BindGrainReference(grainRef); TestGrainReference(grainRef); GrainId observerGrainId = GrainId.NewClientId(); grainRef = GrainReference.NewObserverGrainReference(observerGrainId, GuidId.GetNewGuidId(), this.environment.RuntimeClient.GrainReferenceRuntime); this.environment.GrainFactory.BindGrainReference(grainRef); TestGrainReference(grainRef); GrainId geoObserverGrainId = GrainId.NewClientId("clusterid"); grainRef = GrainReference.NewObserverGrainReference(geoObserverGrainId, GuidId.GetNewGuidId(), this.environment.RuntimeClient.GrainReferenceRuntime); this.environment.GrainFactory.BindGrainReference(grainRef); TestGrainReference(grainRef); }
private static GrainReference MakeTestGrainReference() { GrainId regularGrainId = GrainId.GetGrainIdForTesting(Guid.NewGuid()); GrainReference grainRef = GrainReference.FromGrainId(regularGrainId); return(grainRef); }
public void GrainID_AsGuid() { string guidString = "0699605f-884d-4343-9977-f40a39ab7b2b"; Guid grainIdGuid = Guid.Parse(guidString); GrainId grainId = GrainId.GetGrainIdForTesting(grainIdGuid); //string grainIdToKeyString = grainId.ToKeyString(); string grainIdToFullString = grainId.ToFullString(); string grainIdToGuidString = GrainIdToGuidString(grainId); string grainIdKeyString = grainId.Key.ToString(); output.WriteLine("Guid={0}", grainIdGuid); output.WriteLine("GrainId={0}", grainId); //output.WriteLine("GrainId.ToKeyString={0}", grainIdToKeyString); output.WriteLine("GrainId.Key.ToString={0}", grainIdKeyString); output.WriteLine("GrainIdToGuidString={0}", grainIdToGuidString); output.WriteLine("GrainId.ToFullString={0}", grainIdToFullString); // Equal: Public APIs //Assert.Equal(guidString, grainIdToKeyString); // GrainId.ToKeyString Assert.Equal(guidString, grainIdToGuidString); // GrainIdToGuidString // Equal: Internal APIs Assert.Equal(grainIdGuid, grainId.GetPrimaryKey()); // GetPrimaryKey Guid // NOT-Equal: Internal APIs Assert.NotEqual(guidString, grainIdKeyString); // GrainId.Key.ToString }
private GrainReference MakeTestGrainReference() { GrainId regularGrainId = GrainId.GetGrainIdForTesting(Guid.NewGuid()); GrainReference grainRef = this.ClusterFixture.InternalGrainFactory.GetGrain(regularGrainId); return(grainRef); }
public void GrainReference_Test1() { Guid guid = Guid.NewGuid(); GrainId regularGrainId = GrainId.GetGrainIdForTesting(guid); GrainReference grainRef = GrainReference.FromGrainId(regularGrainId); TestGrainReference(grainRef); grainRef = GrainReference.FromGrainId(regularGrainId, "generic"); TestGrainReference(grainRef); GrainId systemTragetGrainId = GrainId.NewSystemTargetGrainIdByTypeCode(2); grainRef = GrainReference.FromGrainId(systemTragetGrainId, null, SiloAddress.NewLocalAddress(1)); TestGrainReference(grainRef); GrainId observerGrainId = GrainId.NewClientId(); grainRef = GrainReference.NewObserverGrainReference(observerGrainId, GuidId.GetNewGuidId()); TestGrainReference(grainRef); GrainId geoObserverGrainId = GrainId.NewClientId("clusterid"); grainRef = GrainReference.NewObserverGrainReference(geoObserverGrainId, GuidId.GetNewGuidId()); TestGrainReference(grainRef); }
private ActivationAddress GenerateActivationAddress() { var grainId = GrainId.GetGrainIdForTesting(Guid.NewGuid()); var siloAddr = SiloAddress.New(new IPEndPoint(IPAddress.Loopback, 5000), ++generation); return(ActivationAddress.NewActivationAddress(siloAddr, grainId)); }
public void GrainIdShouldEncodeAndDecodePrimaryKeyGuidCorrectly() { const int repeat = 100; for (int i = 0; i < repeat; ++i) { Guid expected = Guid.NewGuid(); GrainId grainId = GrainId.GetGrainIdForTesting(expected); Guid actual = grainId.Key.PrimaryKeyToGuid(); Assert.Equal(expected, actual); // Failed to encode and decode grain id } }
public void GrainIdShouldEncodeAndDecodePrimaryKeyGuidCorrectly() { const int repeat = 100; for (int i = 0; i < repeat; ++i) { Guid expected = Guid.NewGuid(); GrainId grainId = GrainId.GetGrainIdForTesting(expected); Guid actual = grainId.Key.PrimaryKeyToGuid(); Assert.AreEqual(expected, actual, string.Format("Failed to encode and decode grain id with GUID {0}", expected)); } }
public void GrainReference_Interning() { var grainId = GrainId.GetGrainIdForTesting(new Guid()); var g1 = GrainReference.FromGrainId(grainId, null); var g2 = GrainReference.FromGrainId(grainId, null); Assert.Equal(g1, g2); // Should be equal GrainReferences Assert.Same(g1, g2); // Should be same / interned GrainReference object // Round-trip through Serializer var g3 = this.HostedCluster.SerializationManager.RoundTripSerializationForTesting(g1); Assert.Equal(g3, g1); Assert.Equal(g3, g2); Assert.Same(g3, g1); Assert.Same(g3, g2); }
public void GrainId_ToFromPrintableString() { Guid guid = Guid.NewGuid(); GrainId grainId = GrainId.GetGrainIdForTesting(guid); GrainId roundTripped = RoundTripGrainIdToParsable(grainId); Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Guid key string extKey = "Guid-ExtKey-1"; guid = Guid.NewGuid(); grainId = GrainId.GetGrainId(0, guid, extKey); roundTripped = RoundTripGrainIdToParsable(grainId); Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Guid key + Extended Key grainId = GrainId.GetGrainId(0, guid, null); roundTripped = RoundTripGrainIdToParsable(grainId); Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Guid key + null Extended Key long key = random.Next(); guid = UniqueKey.NewKey(key).PrimaryKeyToGuid(); grainId = GrainId.GetGrainIdForTesting(guid); roundTripped = RoundTripGrainIdToParsable(grainId); Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Int64 key extKey = "Long-ExtKey-2"; key = random.Next(); guid = UniqueKey.NewKey(key).PrimaryKeyToGuid(); grainId = GrainId.GetGrainId(0, guid, extKey); roundTripped = RoundTripGrainIdToParsable(grainId); Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Int64 key + Extended Key guid = UniqueKey.NewKey(key).PrimaryKeyToGuid(); grainId = GrainId.GetGrainId(0, guid, null); roundTripped = RoundTripGrainIdToParsable(grainId); Assert.Equal(grainId, roundTripped); // GrainId.ToPrintableString -- Int64 key + null Extended Key }
/// <summary> /// Returns a grain reference. /// </summary> /// <typeparam name="TGrainInterface"> /// The grain interface type. /// </typeparam> /// <returns> /// The <see cref="GrainReference"/>. /// </returns> public GrainReference GetGrainReference <TGrainInterface>() { var grainType = typeof(TGrainInterface); var typeInfo = grainType.GetTypeInfo(); if (typeInfo.IsGenericTypeDefinition) { throw new ArgumentException("Cannot create grain reference for non-concrete grain type"); } if (typeInfo.IsConstructedGenericType) { grainType = typeInfo.GetGenericTypeDefinition(); } var type = typeInfo.Assembly.DefinedTypes.First( _ => { var attr = _.GetCustomAttribute <GrainReferenceAttribute>(); return(attr != null && attr.TargetType == grainType); }).AsType(); if (typeInfo.IsConstructedGenericType) { type = type.MakeGenericType(typeInfo.GetGenericArguments()); } var regularGrainId = GrainId.GetGrainIdForTesting(Guid.NewGuid()); var grainRef = this.fixture.InternalGrainFactory.GetGrain(regularGrainId); return ((GrainReference) type.GetConstructor( BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.CreateInstance, null, new[] { typeof(GrainReference) }, null).Invoke(new object[] { grainRef })); }
/// <summary> /// Returns a grain reference. /// </summary> /// <typeparam name="TGrainInterface"> /// The grain interface type. /// </typeparam> /// <returns> /// The <see cref="GrainReference"/>. /// </returns> public GrainReference GetGrainReference <TGrainInterface>() { var originalGrainType = typeof(TGrainInterface); if (originalGrainType.IsGenericTypeDefinition) { throw new ArgumentException("Cannot create grain reference for non-concrete grain type"); } // The type used in attributes will not be a constructed generic type, so if this is a constructed generic type then we need to // get its corresponding unconstructed type definition. var searchGrainType = originalGrainType.IsConstructedGenericType ? originalGrainType.GetGenericTypeDefinition() : originalGrainType; var type = originalGrainType.Assembly.DefinedTypes.First( _ => { var attr = _.GetCustomAttribute <GrainReferenceAttribute>(); return(attr != null && attr.TargetType == searchGrainType); }).AsType(); if (originalGrainType.IsConstructedGenericType) { type = type.MakeGenericType(originalGrainType.GetGenericArguments()); } var regularGrainId = GrainId.GetGrainIdForTesting(Guid.NewGuid()); var grainRef = this.fixture.InternalGrainFactory.GetGrain(regularGrainId); return ((GrainReference) type.GetConstructor( BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.CreateInstance, null, new[] { typeof(GrainReference) }, null).Invoke(new object[] { grainRef })); }