| 
									
										
										
										
											2016-09-04 03:05:23 +08:00
										 |  |  | // Copyright 2016 The Prometheus Authors
 | 
					
						
							|  |  |  | // Licensed under the Apache License, Version 2.0 (the "License");
 | 
					
						
							|  |  |  | // you may not use this file except in compliance with the License.
 | 
					
						
							|  |  |  | // You may obtain a copy of the License at
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Unless required by applicable law or agreed to in writing, software
 | 
					
						
							|  |  |  | // distributed under the License is distributed on an "AS IS" BASIS,
 | 
					
						
							|  |  |  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					
						
							|  |  |  | // See the License for the specific language governing permissions and
 | 
					
						
							|  |  |  | // limitations under the License.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package strutil | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2021-09-14 03:19:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							| 
									
										
										
										
											2016-09-04 03:05:23 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type linkTest struct { | 
					
						
							|  |  |  | 	expression        string | 
					
						
							|  |  |  | 	expectedGraphLink string | 
					
						
							|  |  |  | 	expectedTableLink string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var linkTests = []linkTest{ | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		"sum(incoming_http_requests_total) by (system)", | 
					
						
							|  |  |  | 		"/graph?g0.expr=sum%28incoming_http_requests_total%29+by+%28system%29&g0.tab=0", | 
					
						
							|  |  |  | 		"/graph?g0.expr=sum%28incoming_http_requests_total%29+by+%28system%29&g0.tab=1", | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		"sum(incoming_http_requests_total{system=\"trackmetadata\"})", | 
					
						
							|  |  |  | 		"/graph?g0.expr=sum%28incoming_http_requests_total%7Bsystem%3D%22trackmetadata%22%7D%29&g0.tab=0", | 
					
						
							|  |  |  | 		"/graph?g0.expr=sum%28incoming_http_requests_total%7Bsystem%3D%22trackmetadata%22%7D%29&g0.tab=1", | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestLink(t *testing.T) { | 
					
						
							|  |  |  | 	for _, tt := range linkTests { | 
					
						
							| 
									
										
										
										
											2021-09-14 03:19:20 +08:00
										 |  |  | 		graphLink := GraphLinkForExpression(tt.expression) | 
					
						
							|  |  |  | 		require.Equal(t, tt.expectedGraphLink, graphLink, | 
					
						
							|  |  |  | 			"GraphLinkForExpression failed for expression (%#q)", tt.expression) | 
					
						
							| 
									
										
										
										
											2016-09-04 03:05:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-14 03:19:20 +08:00
										 |  |  | 		tableLink := TableLinkForExpression(tt.expression) | 
					
						
							|  |  |  | 		require.Equal(t, tt.expectedTableLink, tableLink, | 
					
						
							|  |  |  | 			"TableLinkForExpression failed for expression (%#q)", tt.expression) | 
					
						
							| 
									
										
										
										
											2016-09-04 03:05:23 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-08-27 22:55:49 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestSanitizeLabelName(t *testing.T) { | 
					
						
							|  |  |  | 	actual := SanitizeLabelName("fooClientLABEL") | 
					
						
							|  |  |  | 	expected := "fooClientLABEL" | 
					
						
							| 
									
										
										
										
											2021-09-14 03:19:20 +08:00
										 |  |  | 	require.Equal(t, expected, actual, "SanitizeLabelName failed for label (%s)", expected) | 
					
						
							| 
									
										
										
										
											2018-08-27 22:55:49 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	actual = SanitizeLabelName("barClient.LABEL$$##") | 
					
						
							|  |  |  | 	expected = "barClient_LABEL____" | 
					
						
							| 
									
										
										
										
											2021-09-14 03:19:20 +08:00
										 |  |  | 	require.Equal(t, expected, actual, "SanitizeLabelName failed for label (%s)", expected) | 
					
						
							| 
									
										
										
										
											2023-02-03 23:23:58 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestSanitizeFullLabelName(t *testing.T) { | 
					
						
							|  |  |  | 	actual := SanitizeFullLabelName("fooClientLABEL") | 
					
						
							|  |  |  | 	expected := "fooClientLABEL" | 
					
						
							|  |  |  | 	require.Equal(t, expected, actual, "SanitizeFullLabelName failed for label (%s)", expected) | 
					
						
							| 
									
										
										
										
											2023-02-03 16:44:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 23:23:58 +08:00
										 |  |  | 	actual = SanitizeFullLabelName("barClient.LABEL$$##") | 
					
						
							|  |  |  | 	expected = "barClient_LABEL____" | 
					
						
							|  |  |  | 	require.Equal(t, expected, actual, "SanitizeFullLabelName failed for label (%s)", expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	actual = SanitizeFullLabelName("0zerothClient1LABEL") | 
					
						
							| 
									
										
										
										
											2023-02-03 16:44:29 +08:00
										 |  |  | 	expected = "_zerothClient1LABEL" | 
					
						
							| 
									
										
										
										
											2023-02-03 23:23:58 +08:00
										 |  |  | 	require.Equal(t, expected, actual, "SanitizeFullLabelName failed for label (%s)", expected) | 
					
						
							| 
									
										
										
										
											2023-02-03 16:44:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 23:23:58 +08:00
										 |  |  | 	actual = SanitizeFullLabelName("") | 
					
						
							| 
									
										
										
										
											2023-02-03 16:44:29 +08:00
										 |  |  | 	expected = "_" | 
					
						
							| 
									
										
										
										
											2023-02-03 23:23:58 +08:00
										 |  |  | 	require.Equal(t, expected, actual, "SanitizeFullLabelName failed for the empty label") | 
					
						
							| 
									
										
										
										
											2018-08-27 22:55:49 +08:00
										 |  |  | } |