github.com/m3db/m3@v1.5.1-0.20231129193456-75a402aa583b/src/query/storage/write_test.go (about)

     1  // Copyright (c) 2018 Uber Technologies, Inc.
     2  //
     3  // Permission is hereby granted, free of charge, to any person obtaining a copy
     4  // of this software and associated documentation files (the "Software"), to deal
     5  // in the Software without restriction, including without limitation the rights
     6  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     7  // copies of the Software, and to permit persons to whom the Software is
     8  // furnished to do so, subject to the following conditions:
     9  //
    10  // The above copyright notice and this permission notice shall be included in
    11  // all copies or substantial portions of the Software.
    12  //
    13  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    14  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    15  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    16  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    17  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    18  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    19  // THE SOFTWARE.
    20  
    21  package storage
    22  
    23  import (
    24  	"testing"
    25  
    26  	"github.com/m3db/m3/src/query/models"
    27  	"github.com/m3db/m3/src/query/storage/m3/storagemetadata"
    28  	"github.com/m3db/m3/src/query/ts"
    29  	xerrors "github.com/m3db/m3/src/x/errors"
    30  	xtime "github.com/m3db/m3/src/x/time"
    31  
    32  	"github.com/stretchr/testify/require"
    33  )
    34  
    35  func TestNewWriteQueryValidateTags(t *testing.T) {
    36  	// Create known bad tags.
    37  	tags := models.NewTags(0, models.NewTagOptions().
    38  		SetIDSchemeType(models.TypeQuoted))
    39  	tags = tags.AddTag(models.Tag{Name: []byte(""), Value: []byte("foo")})
    40  	require.Error(t, tags.Validate())
    41  
    42  	// Try to create a write query.
    43  	_, err := NewWriteQuery(WriteQueryOptions{
    44  		Tags: tags,
    45  		Datapoints: ts.Datapoints{
    46  			{
    47  				Timestamp: xtime.Now(),
    48  				Value:     42,
    49  			},
    50  		},
    51  		Unit: xtime.Second,
    52  		Attributes: storagemetadata.Attributes{
    53  			MetricsType: storagemetadata.UnaggregatedMetricsType,
    54  		},
    55  	})
    56  	require.Error(t, err)
    57  	require.True(t, xerrors.IsInvalidParams(err))
    58  }
    59  
    60  func TestNewWriteQueryValidateDatapoints(t *testing.T) {
    61  	// Try to create a write query.
    62  	_, err := NewWriteQuery(WriteQueryOptions{
    63  		Tags:       models.MustMakeTags("foo", "bar"),
    64  		Datapoints: ts.Datapoints{},
    65  		Unit:       xtime.Second,
    66  		Attributes: storagemetadata.Attributes{
    67  			MetricsType: storagemetadata.UnaggregatedMetricsType,
    68  		},
    69  	})
    70  	require.Error(t, err)
    71  	require.True(t, xerrors.IsInvalidParams(err))
    72  }
    73  
    74  func TestNewWriteQueryValidateUnit(t *testing.T) {
    75  	// Try to create a write query.
    76  	_, err := NewWriteQuery(WriteQueryOptions{
    77  		Tags: models.MustMakeTags("foo", "bar"),
    78  		Datapoints: ts.Datapoints{
    79  			{
    80  				Timestamp: xtime.Now(),
    81  				Value:     42,
    82  			},
    83  		},
    84  		Unit: xtime.Unit(999),
    85  		Attributes: storagemetadata.Attributes{
    86  			MetricsType: storagemetadata.UnaggregatedMetricsType,
    87  		},
    88  	})
    89  	require.Error(t, err)
    90  	require.True(t, xerrors.IsInvalidParams(err))
    91  }