github.com/tacerus/ldifdiff@v0.0.0-20181030102753-4dccbe38183b/generic_test.go (about)

     1  package ldifdiff
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"strings"
     7  )
     8  
     9  //* Test data */
    10  const testBigFilesEnv = "LDIFDIFF_BIGFILES"
    11  const testBigFilesEnvValue = "1"
    12  const testDn = "dn: some_dn,ou=aAccounts,dc=domain,dc=ext"
    13  const testSourceLdifFile = "t/source.ldif"
    14  const testTargetLdifFile = "t/target.ldif"
    15  const testResultLdifFile = "t/result.ldif"
    16  const testResultDnFile = "t/result_dn"
    17  const testResultDnIgnoreAttrFile = "t/result_dn_ignore_attr"
    18  const testInvalidLineContLdifFile = "t/invalid_line_continuation.ldif"
    19  const testInvalidNoDnLdifFile = "t/invalid_no_dn.ldif"
    20  const testSourceLdifFileBig = "t/_source_big.ldif"
    21  const testTargetLdifFileBig = "t/_target_big.ldif"
    22  const testResultLdifFileBig = "t/_result_big.ldif"
    23  const testModifyAddLdifFile = "t/modifyAdd.ldif"
    24  const testModifyDeleteLdifFile = "t/modifyDelete.ldif"
    25  const testModifyReplaceLdifFile = "t/modifyReplace.ldif"
    26  const testModifyLdifFile = "t/modify.ldif"
    27  
    28  var testSourceStr = testGetLdifeStr(testSourceLdifFile, false)
    29  var testSourceNrEntries = testGetNrOfEntries(testSourceStr)
    30  var testTargetStr = testGetLdifeStr(testTargetLdifFile, false)
    31  var testResultStr = testGetLdifeStr(testResultLdifFile, false)
    32  var testResultDnStr = testGetLdifeStr(testResultDnFile, false)
    33  var testResultDnIgnoreAttrStr = testGetLdifeStr(testResultDnIgnoreAttrFile, false)
    34  var testInvalidLineContStr = testGetLdifeStr(testInvalidLineContLdifFile, false)
    35  var testInvalidNoDnStr = testGetLdifeStr(testInvalidNoDnLdifFile, false)
    36  var testSourceStrBig = testGetLdifeStr(testSourceLdifFileBig, true)
    37  var testTargetStrBig = testGetLdifeStr(testTargetLdifFileBig, true)
    38  var testResultStrBig = testGetLdifeStr(testResultLdifFileBig, true)
    39  var testModifyAddStr = testGetLdifeStr(testModifyAddLdifFile, false)
    40  var testModifyDeleteStr = testGetLdifeStr(testModifyDeleteLdifFile, false)
    41  var testModifyReplaceStr = testGetLdifeStr(testModifyReplaceLdifFile, false)
    42  var testModifyStr = testGetLdifeStr(testModifyLdifFile, false)
    43  var testIgnoreAttr = []string{"sambaSID", "eduPersonEntitlement"}
    44  var testIgnoreAttrDn = []string{"sambaSID", "eduPersonEntitlement", "mail"}
    45  var testAttrList = []string{"mail: auth2@domain.ext", "phone: +32364564645"}
    46  var testAttrListModifyReplace = []string{testAttrList[0]}
    47  var testActionEntryTestData = testGetActionEntryMap()
    48  
    49  /* Helper functions and types */
    50  type TestActionEntryData struct {
    51  	Add, Delete, Modify, ModifyOnlyAdd,
    52  	ModifyOnlyDelete, ModifyOnlyReplace,
    53  	ModifyNone, ModifyReplaceAttributes actionEntry
    54  }
    55  
    56  func testGetActionEntryMap() TestActionEntryData {
    57  	return TestActionEntryData{
    58  		Add: actionEntry{Dn: testDn, Action: actionAdd,
    59  			SubActionAttrs:  []subActionAttrs{{subActionNone: testAttrList}}},
    60  		Delete: actionEntry{Dn: testDn, Action: actionDelete,
    61  			SubActionAttrs:     []subActionAttrs{{subActionNone: testAttrList}}},
    62  		Modify: actionEntry{Dn: testDn, Action: actionModify,
    63  			SubActionAttrs: []subActionAttrs{
    64  				{subActionModifyAdd: testAttrList},
    65  				{subActionModifyDelete: testAttrList},
    66  				{subActionModifyReplace: testAttrListModifyReplace}}},
    67  		ModifyOnlyAdd: actionEntry{Dn: testDn, Action: actionModify,
    68  			SubActionAttrs:            []subActionAttrs{{subActionModifyAdd: testAttrList}}},
    69  		ModifyOnlyDelete: actionEntry{Dn: testDn, Action: actionModify,
    70  			SubActionAttrs:               []subActionAttrs{{subActionModifyDelete: testAttrList}}},
    71  		ModifyOnlyReplace: actionEntry{Dn: testDn, Action: actionModify,
    72  			SubActionAttrs:                []subActionAttrs{{subActionModifyReplace: testAttrListModifyReplace}}},
    73  		ModifyNone: actionEntry{Dn: testDn, Action: actionModify,
    74  			SubActionAttrs:         []subActionAttrs{{subActionNone: testAttrList}}},
    75  		ModifyReplaceAttributes: actionEntry{Dn: testDn, Action: actionModify,
    76  			SubActionAttrs:                      []subActionAttrs{{subActionModifyReplace: testAttrList}}},
    77  	}
    78  }
    79  
    80  func testGetLdifeStr(file string, big bool) string {
    81  	if big && os.Getenv(testBigFilesEnv) != testBigFilesEnvValue {
    82  		return ""
    83  	}
    84  	bytes, _ := ioutil.ReadFile(file)
    85  	return string(bytes) + "\n"
    86  }
    87  
    88  func testGetNrOfEntries(ldifStr string) int {
    89  	var counter int
    90  	for _, line := range strings.Split(ldifStr, "\n") {
    91  		if strings.HasPrefix(line, "dn:") {
    92  			counter++
    93  		}
    94  	}
    95  	return counter
    96  }