private void VerifyPartitionEntities( CloudTable table, IEnumerable <DynamicTableEntity> records, int partIdx, int expectedEntityCount, EqualityComparerDataProperty dataComparer, int expectedEntitiesWithDuplicateData, bool recordsContainInstanceInfo) { string recordDescription = recordsContainInstanceInfo ? "records with instance information" : "records without instance information"; // Verify the entity count int numRecords = records.Count(); if (numRecords != expectedEntityCount) { Utility.TraceSource.WriteError( AzureTableUploaderTest.TraceType, "Table {0} partition {1} does not have the expected number of {2}. Expected records: {3}, actual records: {4}.", table.Name, partIdx, recordDescription, expectedEntityCount, numRecords); Verify.Fail("Unexpected count of records"); } // Verify that the records do not have duplicate data IEnumerable <DynamicTableEntity> distinctRecords = records.Distinct(dataComparer); int numDistinctRecords = distinctRecords.Count(); if ((numRecords - numDistinctRecords) != expectedEntitiesWithDuplicateData) { Utility.TraceSource.WriteError( AzureTableUploaderTest.TraceType, "We found duplicate data in {0} {1}, but we expected duplicate data in {2} records. Table {3}, partition {4}.", (numRecords - numDistinctRecords), recordDescription, expectedEntitiesWithDuplicateData, table.Name, partIdx); Verify.Fail("Unexpected partition records with duplicate data"); } // Verify that the data values are as expected int maxDataValue = records.Max( r => { return((int)r.Properties[AzureTableUploaderTest.DataProperty].Int32Value); }); if (maxDataValue != (numDistinctRecords - 1)) { Utility.TraceSource.WriteError( AzureTableUploaderTest.TraceType, "Unexpected maximum data value for {0} in table {1} partition {2}. Expected max: {3}, Actual max: {4}.", recordDescription, table.Name, partIdx, (numRecords - 1), maxDataValue); Verify.Fail("Unexpected maximum entity data value in partition"); } int minDataValue = records.Min( r => { return((int)r.Properties[AzureTableUploaderTest.DataProperty].Int32Value); }); if (minDataValue != 0) { Utility.TraceSource.WriteError( AzureTableUploaderTest.TraceType, "Unexpected minimum data value for {0} in table {1} partition {2}. Expected min: {3}, Actual min: {4}.", recordDescription, table.Name, partIdx, 0, minDataValue); Verify.Fail("Unexpected maximum entity data value in partition"); } }
private void VerifyPartitionEntities(CloudTable table, int partIdx) { // Get records in the partition TableQuery <DynamicTableEntity> partitionQuery = new TableQuery <DynamicTableEntity>(); partitionQuery = (new TableQuery <DynamicTableEntity>()) .Where(TableQuery.GenerateFilterCondition( "PartitionKey", QueryComparisons.Equal, partIdx.ToString())); IEnumerable <DynamicTableEntity> partitionRecords = table.ExecuteQuery(partitionQuery); if (0 == partitionRecords.Count()) { Utility.TraceSource.WriteError( AzureTableUploaderTest.TraceType, "Table {0} partition {1} has no records.", table.Name, partIdx); Verify.Fail("No records found in partition"); } bool hasDeletionEventWithIdOnly = (partitionRecords .Where(r => ((r.Properties.ContainsKey(AzureTableUploaderTest.EventTypeProperty)) && (r.Properties[AzureTableUploaderTest.EventTypeProperty].StringValue.Equals("IdOnlyDeletion")))) .Count()) > 0; int expectedEntityCount = EventsForPartition(partIdx); EqualityComparerDataProperty dataComparer = new EqualityComparerDataProperty(); if (table.Name.Equals(String.Concat(AzureTableUploaderTest.TableNamePrefix, TableNames[1]))) { // Get records without instance information IEnumerable <DynamicTableEntity> recordsWithoutInstance = partitionRecords.Where( r => ((false == r.Properties.ContainsKey("dca_instance")) && (false == r.RowKey.Equals(AzureTableQueryableEventUploader.StatusEntityRowKey)))); // Verify the records VerifyPartitionEntities( table, recordsWithoutInstance, partIdx, hasDeletionEventWithIdOnly ? (expectedEntityCount + 1) : expectedEntityCount, dataComparer, hasDeletionEventWithIdOnly ? 1 : 0, false); } // Get records with instance information IEnumerable <DynamicTableEntity> recordsWithInstance = partitionRecords.Where( r => (r.Properties.ContainsKey("dca_instance"))); // Verify the records VerifyPartitionEntities( table, recordsWithInstance, partIdx, hasDeletionEventWithIdOnly ? (expectedEntityCount - 1) : expectedEntityCount, dataComparer, 0, true); // Verify the instance information in the records VerifyInstanceInformation(table, recordsWithInstance, partIdx, hasDeletionEventWithIdOnly); }