@@ -656,6 +656,50 @@ TEST_F(MeterCreateInstrumentTest, ViewCorrectedDuplicateSyncInstrumentsByDescrip
656656 });
657657}
658658
659+ TEST_F (MeterCreateInstrumentTest, SyncInstrumentWithInvalidAttributes)
660+ {
661+ InstrumentDescriptor descriptor{" my_counter" , " desc" , " unit" , InstrumentType::kCounter ,
662+ InstrumentValueType::kDouble };
663+ AddDescriptionCorrectionView (descriptor.name_ , descriptor.unit_ , descriptor.type_ ,
664+ descriptor.description_ );
665+
666+ auto counter1 = meter_->CreateDoubleCounter (" my_counter" , " desc" , " unit" );
667+ counter1->Add (
668+ 1 ,
669+ {{" key" , " value1" }, {" invalid-key\xff " , " valid-value" }, {" valid-key" , " invalid-value\xff " }});
670+
671+ metric_reader_ptr_->Collect ([this ](ResourceMetrics &metric_data) {
672+ EXPECT_EQ (metric_data.scope_metric_data_ .size (), 1 );
673+ // only one metric_data object expected after correction with the view
674+ EXPECT_EQ (metric_data.scope_metric_data_ [0 ].metric_data_ .size (), 1 );
675+ EXPECT_EQ (metric_data.scope_metric_data_ [0 ].metric_data_ [0 ].point_data_attr_ .size (), 1 );
676+ return true ;
677+ });
678+ }
679+
680+ TEST_F (MeterCreateInstrumentTest, AsyncInstrumentWithInvalidAttributes)
681+ {
682+ auto observable_counter1 =
683+ meter_->CreateInt64ObservableCounter (" observable_counter" , " desc" , " unit" );
684+ auto callback1 = [](opentelemetry::metrics::ObserverResult observer, void * /* state */ ) {
685+ auto observer_long =
686+ nostd::get<nostd::shared_ptr<opentelemetry::metrics::ObserverResultT<int64_t >>>(observer);
687+ observer_long->Observe (12 , {{" key" , " value1" },
688+ {" invalid-key\xff " , " valid-value" },
689+ {" valid-key" , " invalid-value\xff " }});
690+ };
691+
692+ observable_counter1->AddCallback (callback1, nullptr );
693+
694+ metric_reader_ptr_->Collect ([this ](ResourceMetrics &metric_data) {
695+ EXPECT_EQ (metric_data.scope_metric_data_ .size (), 1 );
696+ EXPECT_EQ (metric_data.scope_metric_data_ [0 ].metric_data_ .size (), 1 );
697+ auto &point_data_attr = metric_data.scope_metric_data_ [0 ].metric_data_ [0 ].point_data_attr_ ;
698+ EXPECT_EQ (point_data_attr.size (), 1 );
699+ return true ;
700+ });
701+ }
702+
659703TEST_F (MeterCreateInstrumentTest, IdenticalAsyncInstruments)
660704{
661705 auto observable_counter1 =
0 commit comments