github.com/siglens/siglens@v0.0.0-20240328180423-f7ce9ae441ed/pkg/virtualtable/virtualtable_test.go (about)

     1  /*
     2  Copyright 2023.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8  	http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package virtualtable
    18  
    19  import (
    20  	"bufio"
    21  	"fmt"
    22  	"os"
    23  	"strings"
    24  	"testing"
    25  
    26  	"github.com/siglens/siglens/pkg/config"
    27  	"github.com/stretchr/testify/assert"
    28  )
    29  
    30  func Test_AddGetVTables(t *testing.T) {
    31  
    32  	config.InitializeDefaultConfig()
    33  	_ = InitVTable()
    34  
    35  	VTableBaseDir = "vtabbase/"
    36  	VTableMappingsDir = "vtabbase/mappings/"
    37  	VTableTemplatesDir = "vtabbase/templates/"
    38  	VTableAliasesDir = "vtabbase/aliases/"
    39  	// special test code only to override the default paths and have idempotent tests
    40  	_ = CreateVirtTableBaseDirs(VTableBaseDir, VTableMappingsDir, VTableTemplatesDir, VTableAliasesDir)
    41  
    42  	mapdata := ""
    43  	idx1 := "idx-blah1"
    44  	_ = AddVirtualTableAndMapping(&idx1, &mapdata, 0)
    45  	idx1 = "idx-blah2"
    46  	_ = AddVirtualTableAndMapping(&idx1, &mapdata, 0)
    47  	idx1 = "idx-blah3"
    48  	_ = AddVirtualTableAndMapping(&idx1, &mapdata, 0)
    49  	idx1 = "idx-blah4"
    50  	_ = AddVirtualTableAndMapping(&idx1, &mapdata, 0)
    51  
    52  	result, _ := GetVirtualTableNames(0)
    53  
    54  	expected := map[string]bool{
    55  		"idx-blah1": true,
    56  		"idx-blah2": true,
    57  		"idx-blah3": true,
    58  		"idx-blah4": true}
    59  	//	t.Logf("result=%v", result)
    60  
    61  	assert.EqualValues(t, expected, result, fmt.Sprintf("Comparison failed, expected=%v, actual=%v", expected, result))
    62  
    63  	// special test code only to override the default paths and have idempotent tests
    64  	os.RemoveAll(VTableBaseDir)
    65  	os.RemoveAll("data/")
    66  
    67  }
    68  
    69  func Test_AddAliases(t *testing.T) {
    70  
    71  	_ = InitVTable()
    72  	// special test code only to override the default paths and have idempotent tests
    73  
    74  	VTableBaseDir = "vtabbase/"
    75  	VTableMappingsDir = "vtabbase/mappings/"
    76  	VTableTemplatesDir = "vtabbase/templates/"
    77  	VTableAliasesDir = "vtabbase/aliases/"
    78  	// special test code only to override the default paths and have idempotent tests
    79  	_ = CreateVirtTableBaseDirs(VTableBaseDir, VTableMappingsDir, VTableTemplatesDir, VTableAliasesDir)
    80  
    81  	expected := map[string]bool{}
    82  	expected["myalias1"] = true
    83  	expected["myalias2"] = true
    84  	expected["myalias3"] = true
    85  
    86  	idxname := "myidx1"
    87  
    88  	_ = AddAliases(idxname, []string{"myalias1"}, 0)
    89  	_ = AddAliases(idxname, []string{"myalias2"}, 0)
    90  	_ = AddAliases(idxname, []string{"myalias3"}, 0)
    91  
    92  	actual, _ := GetAliases(idxname, 0)
    93  
    94  	assert.EqualValues(t, expected, actual, fmt.Sprintf("Comparison failed, expected=%v, actual=%v", expected, actual))
    95  
    96  	// special test code only to override the default paths and have idempotent tests
    97  	os.RemoveAll(VTableBaseDir)
    98  	//os.RemoveAll(vTableBaseDir)
    99  }
   100  
   101  func Test_GetIndexNameFromAlias(t *testing.T) {
   102  
   103  	_ = InitVTable()
   104  	os.RemoveAll(VTableBaseDir)
   105  
   106  	// special test code only to ove\rride the default paths and have idempotent tests
   107  
   108  	VTableBaseDir = "vtabbase/"
   109  	VTableMappingsDir = "vtabbase/mappings/"
   110  	VTableTemplatesDir = "vtabbase/templates/"
   111  	VTableAliasesDir = "vtabbase/aliases/"
   112  	// special test code only to override the default paths and have idempotent tests
   113  	_ = CreateVirtTableBaseDirs(VTableBaseDir, VTableMappingsDir, VTableTemplatesDir, VTableAliasesDir)
   114  
   115  	idxname := "myidx1"
   116  
   117  	_ = AddAliases(idxname, []string{"myalias1"}, 0)
   118  	_ = AddAliases(idxname, []string{"myalias2"}, 0)
   119  	_ = AddAliases(idxname, []string{"myalias3"}, 0)
   120  
   121  	actual, err := GetIndexNameFromAlias("myalias2", 0)
   122  
   123  	assert.Nil(t, err)
   124  
   125  	t.Logf("GetIndexNameFromAlias: idxName=%v", actual)
   126  	assert.EqualValues(t, idxname, actual)
   127  
   128  	// special test code only to override the default paths and have idempotent tests
   129  	os.RemoveAll(VTableBaseDir)
   130  }
   131  
   132  func Test_AddRemoveAlias(t *testing.T) {
   133  
   134  	_ = InitVTable()
   135  	os.RemoveAll(VTableBaseDir)
   136  
   137  	// special test code only to ove\rride the default paths and have idempotent tests
   138  
   139  	VTableBaseDir = "vtabbase/"
   140  	VTableMappingsDir = "vtabbase/mappings/"
   141  	VTableTemplatesDir = "vtabbase/templates/"
   142  	VTableAliasesDir = "vtabbase/aliases/"
   143  	// special test code only to override the default paths and have idempotent tests
   144  	_ = CreateVirtTableBaseDirs(VTableBaseDir, VTableMappingsDir, VTableTemplatesDir, VTableAliasesDir)
   145  
   146  	idxname := "myidx1"
   147  
   148  	_ = AddAliases(idxname, []string{"myalias1"}, 0)
   149  
   150  	actual, err := GetIndexNameFromAlias("myalias1", 0)
   151  
   152  	//	t.Logf("GetIndexNameFromAlias: idxName=%v", actual)
   153  
   154  	assert.Nil(t, err)
   155  	assert.EqualValues(t, idxname, actual)
   156  
   157  	_ = RemoveAliases(idxname, []string{"myalias1"}, 0)
   158  	assert.Nil(t, err)
   159  
   160  	actual, err = GetIndexNameFromAlias(idxname, 0)
   161  	assert.NotNil(t, err)
   162  	assert.Equal(t, "", actual)
   163  
   164  	// special test code only to override the default paths and have idempotent tests
   165  	os.RemoveAll(VTableBaseDir)
   166  
   167  }
   168  
   169  func Test_DeleteVirtualTable(t *testing.T) {
   170  
   171  	indexName := "valtix2"
   172  
   173  	_ = InitVTable()
   174  
   175  	var check string
   176  	var sb strings.Builder
   177  	sb.WriteString(config.GetDataPath() + "ingestnodes/" + config.GetHostID() + "/vtabledata")
   178  	fname := sb.String()
   179  	_ = os.MkdirAll(fname, 0764)
   180  	_, errC := os.Create(fname + VIRTUAL_TAB_FILENAME)
   181  	assert.Nil(t, errC)
   182  	check += "valtix1" + "\n" + "valtix3" + "\n"
   183  	check += indexName
   184  	t.Logf("VirtualTableNames before deletion = %s", check)
   185  	err := os.WriteFile(fname+VIRTUAL_TAB_FILENAME+VIRTUAL_TAB_FILE_EXT, []byte(check), 0644)
   186  	assert.Nil(t, err)
   187  	t.Logf("VirtualTableName for deletion = %s", indexName)
   188  
   189  	err = DeleteVirtualTable(&indexName, 0)
   190  	assert.Nil(t, err)
   191  	fd, _ := os.OpenFile(fname+VIRTUAL_TAB_FILENAME+VIRTUAL_TAB_FILE_EXT, os.O_APPEND|os.O_RDONLY, 0644)
   192  	scanner := bufio.NewScanner(fd)
   193  
   194  	var flag bool
   195  	flag = true
   196  	for scanner.Scan() {
   197  		t.Logf("VirtualTableNames left after deletion = %s ", string(scanner.Bytes()))
   198  		flag = strings.Contains(string(scanner.Bytes()), indexName)
   199  		assert.Equal(t, flag, false)
   200  	}
   201  	assert.Equal(t, flag, false)
   202  	os.RemoveAll(fname)
   203  	os.RemoveAll(config.GetRunningConfig().DataPath)
   204  
   205  }
   206  
   207  func Test_ExpandAndReturnIndexNames(t *testing.T) {
   208  
   209  	indexPattern := "idx-blah1"
   210  	indicesEntries := ExpandAndReturnIndexNames(indexPattern, 0, false)
   211  	indicesExpected := "idx-blah1"
   212  	assert.Equal(t, indicesExpected, indicesEntries[0])
   213  
   214  	indexPattern = "traces"
   215  	indicesEntries = ExpandAndReturnIndexNames(indexPattern, 0, false)
   216  	indicesExpected = "traces"
   217  	assert.Equal(t, indicesExpected, indicesEntries[0])
   218  
   219  	indexPattern = "service-dependency"
   220  	indicesEntries = ExpandAndReturnIndexNames(indexPattern, 0, false)
   221  	indicesExpected = "service-dependency"
   222  	assert.Equal(t, indicesExpected, indicesEntries[0])
   223  
   224  	indexPattern = "red-traces"
   225  	indicesEntries = ExpandAndReturnIndexNames(indexPattern, 0, false)
   226  	indicesExpected = "red-traces"
   227  	assert.Equal(t, indicesExpected, indicesEntries[0])
   228  
   229  	// special test code only to override the default paths and have idempotent tests
   230  	os.RemoveAll(config.GetRunningConfig().DataPath)
   231  	os.RemoveAll(VTableBaseDir)
   232  }