How to use NewSuite method of internal Package

Best Ginkgo code snippet using internal.NewSuite

suites_test.go

Source:suites_test.go Github

copy

Full Screen

1package jess2import (3	"errors"4	"fmt"5	"strings"6	"testing"7	"github.com/safing/jess/hashtools"8	"github.com/safing/jess/tools"9)10func getSuite(t *testing.T, suiteID string) (suite *Suite) {11	t.Helper()12	suite, ok := GetSuite(suiteID)13	if !ok {14		t.Fatalf("suite %s does not exist", suiteID)15		return nil16	}17	return suite18}19func TestSuites(t *testing.T) {20	t.Parallel()21	for _, suite := range Suites() {22		err := suiteBullshitCheck(suite)23		if err != nil {24			t.Errorf("suite %s has incorrect property: %s", suite.ID, err)25			continue26		}27		envelope, err := setupEnvelopeAndTrustStore(t, suite)28		if err != nil {29			t.Errorf("failed to setup test envelope for suite %s: %s", suite.ID, err)30			continue31		}32		if envelope == nil {33			t.Errorf("suite %s has an invalid toolset", suite.ID)34			continue35		}36		session, err := envelope.Correspondence(testTrustStore)37		if err != nil {38			t.Errorf("failed to init session for suite %s: %s", suite.ID, err)39			continue40		}41		letter, err := session.Close([]byte(testData1))42		if err != nil {43			tErrorf(t, "suite %s failed to close (1): %s", suite.ID, err)44			continue45		}46		msg, err := letter.ToJSON()47		if err != nil {48			tErrorf(t, "suite %s failed to json encode (1): %s", suite.ID, err)49			continue50		}51		// test 2: open52		letter2, err := LetterFromJSON(msg)53		if err != nil {54			tErrorf(t, "suite %s failed to json decode (2): %s", suite.ID, err)55			continue56		}57		origData2, err := letter2.Open(envelope.suite.Provides, testTrustStore)58		if err != nil {59			tErrorf(t, "suite %s failed to open (2): %s", suite.ID, err)60			continue61		}62		if string(origData2) != testData1 {63			tErrorf(t, "%v original data mismatch (2): %s", suite.ID, string(origData2))64			continue65		}66		// test 2.1: verify67		letter21, err := LetterFromJSON(msg)68		if err != nil {69			tErrorf(t, "suite %s failed to json decode (2): %s", suite.ID, err)70			continue71		}72		if len(letter21.Signatures) > 0 {73			err = letter21.Verify(envelope.suite.Provides, testTrustStore)74			if err != nil {75				tErrorf(t, "suite %s failed to verify (2): %s", suite.ID, err)76				continue77			}78		}79	}80}81func suiteBullshitCheck(suite *Suite) error { //nolint:maintidx82	// pre checks83	if suite.Provides == nil {84		return errors.New("provides no requirement attributes")85	}86	if suite.SecurityLevel == 0 {87		return errors.New("does not specify security level")88	}89	// create session struct for holding information90	s := &Session{91		envelope: &Envelope{92			suite: suite,93		},94		toolRequirements: newEmptyRequirements(),95	}96	// check if we are assuming we have a key97	assumeKey := strings.Contains(suite.ID, "key")98	if assumeKey {99		s.toolRequirements.Add(SenderAuthentication)100		s.toolRequirements.Add(RecipientAuthentication)101	}102	// tool check loop: start103	for i, toolID := range suite.Tools {104		// =====================================105		// tool check loop: check for duplicates106		// =====================================107		for j, dupeToolID := range suite.Tools {108			if i != j && toolID == dupeToolID {109				return fmt.Errorf("cannot use tool %s twice, each tool may be only specified once", toolID)110			}111		}112		// ====================================113		// tool check loop: parse, prep and get114		// ====================================115		var (116			hashTool  *hashtools.HashTool117			hashSumFn func() ([]byte, error)118		)119		// parse ID for args120		var arg string121		if strings.Contains(toolID, "(") {122			splitted := strings.Split(toolID, "(")123			toolID = splitted[0]124			arg = strings.Trim(splitted[1], "()")125		}126		// get tool127		tool, err := tools.Get(toolID)128		if err != nil {129			return fmt.Errorf("the specified tool %s could not be found", toolID)130		}131		// create logic instance and add to logic and state lists132		logic := tool.Factory()133		s.all = append(s.all, logic)134		if tool.Info.HasOption(tools.OptionHasState) {135			s.toolsWithState = append(s.toolsWithState, logic)136		}137		// ============================================================138		// tool check loop: assign tools to queues and add requirements139		// ============================================================140		switch tool.Info.Purpose {141		case tools.PurposeKeyDerivation:142			if s.kdf != nil {143				return fmt.Errorf("cannot use %s, you may only specify one key derivation tool and %s was already specified", tool.Info.Name, s.kdf.Info().Name)144			}145			s.kdf = logic146		case tools.PurposePassDerivation:147			if s.passDerivator != nil {148				return fmt.Errorf("cannot use %s, you may only specify one password derivation tool and %s was already specified", tool.Info.Name, s.passDerivator.Info().Name)149			}150			s.passDerivator = logic151			s.toolRequirements.Add(SenderAuthentication)152			s.toolRequirements.Add(RecipientAuthentication)153		case tools.PurposeKeyExchange:154			s.keyExchangers = append(s.keyExchangers, logic)155			s.toolRequirements.Add(RecipientAuthentication)156		case tools.PurposeKeyEncapsulation:157			s.keyEncapsulators = append(s.keyEncapsulators, logic)158			s.toolRequirements.Add(RecipientAuthentication)159		case tools.PurposeSigning:160			s.signers = append(s.signers, logic)161			s.toolRequirements.Add(SenderAuthentication)162		case tools.PurposeIntegratedCipher:163			s.integratedCiphers = append(s.integratedCiphers, logic)164			s.toolRequirements.Add(Confidentiality)165			s.toolRequirements.Add(Integrity)166		case tools.PurposeCipher:167			s.ciphers = append(s.ciphers, logic)168			s.toolRequirements.Add(Confidentiality)169		case tools.PurposeMAC:170			s.macs = append(s.macs, logic)171			s.toolRequirements.Add(Integrity)172		}173		// =============================================174		// tool check loop: process options, get hashers175		// =============================================176		for _, option := range tool.Info.Options {177			switch option {178			case tools.OptionNeedsManagedHasher:179				// get managed hasher list180				var managedHashers map[string]*managedHasher181				switch tool.Info.Purpose {182				case tools.PurposeMAC:183					if s.managedMACHashers == nil {184						s.managedMACHashers = make(map[string]*managedHasher)185					}186					managedHashers = s.managedMACHashers187				case tools.PurposeSigning:188					if s.managedSigningHashers == nil {189						s.managedSigningHashers = make(map[string]*managedHasher)190					}191					managedHashers = s.managedSigningHashers192				default:193					return fmt.Errorf("only MAC and Signing tools may use managed hashers")194				}195				// get or assign a new managed hasher196				mngdHasher, ok := managedHashers[arg]197				if !ok {198					// get hashtool199					ht, err := hashtools.Get(arg)200					if err != nil {201						return fmt.Errorf("the specified hashtool for %s(%s) could not be found", toolID, arg)202					}203					// save to managed hashers204					mngdHasher = &managedHasher{205						tool: ht,206						hash: ht.New(),207					}208					managedHashers[arg] = mngdHasher209				}210				hashTool = mngdHasher.tool211				hashSumFn = mngdHasher.Sum212			case tools.OptionNeedsDedicatedHasher:213				hashTool, err = hashtools.Get(arg)214				if err != nil {215					return fmt.Errorf("the specified hashtool for %s(%s) could not be found", toolID, arg)216				}217			}218		}219		// ================================220		// tool check loop: initialize tool221		// ================================222		// init tool223		logic.Init(224			tool,225			&Helper{226				session: s,227				info:    tool.Info,228			},229			hashTool,230			hashSumFn,231		)232		// ===============================================233		// tool check loop: calc and check security levels234		// ===============================================235		err = s.calcAndCheckSecurityLevel(logic, nil)236		if err != nil {237			return err238		}239	} // tool check loop: end240	// ============241	// final checks242	// ============243	// check requirements requirements244	if s.toolRequirements.Empty() {245		return errors.New("suite does not provide any security attributes")246	}247	// check if we have recipient auth without confidentiality248	if s.toolRequirements.Has(RecipientAuthentication) &&249		!s.toolRequirements.Has(Confidentiality) {250		return errors.New("having recipient authentication without confidentiality does not make sense")251	}252	// check if we have confidentiality without integrity253	if s.toolRequirements.Has(Confidentiality) &&254		!s.toolRequirements.Has(Integrity) {255		return errors.New("having confidentiality without integrity does not make sense")256	}257	// check if we are missing a kdf, but need one258	if s.kdf == nil && len(s.signers) != len(s.envelope.suite.Tools) {259		return errors.New("missing a key derivation tool")260	}261	// check if have a kdf, even if we don't need one262	if len(s.integratedCiphers) == 0 &&263		len(s.ciphers) == 0 &&264		len(s.macs) == 0 &&265		s.kdf != nil {266		return errors.New("key derivation tool specified, but not needed")267	}268	// ======================================269	// check if values match suite definition270	// ======================================271	// check if security level matches272	if s.SecurityLevel != suite.SecurityLevel {273		return fmt.Errorf("suite has incorrect security level: %d (expected %d)", suite.SecurityLevel, s.SecurityLevel)274	}275	// check if requirements match276	if s.toolRequirements.SerializeToNoSpec() != suite.Provides.SerializeToNoSpec() {277		return fmt.Errorf(278			"suite has incorrect attributes: no %s (expected no %s)",279			suite.Provides.SerializeToNoSpec(),280			s.toolRequirements.SerializeToNoSpec(),281		)282	}283	// ========================================================284	// check if computeSuiteAttributes returns the same results285	// ========================================================286	computedSuite := computeSuiteAttributes(suite.Tools, assumeKey)287	if computedSuite == nil {288		return errors.New("internal error: could not compute suite attributes")289	}290	if suite.SecurityLevel != computedSuite.SecurityLevel {291		return fmt.Errorf("internal error: computeSuiteAttributes error: security level: suite=%d computed=%d", suite.SecurityLevel, computedSuite.SecurityLevel)292	}293	if suite.Provides.SerializeToNoSpec() != computedSuite.Provides.SerializeToNoSpec() {294		return fmt.Errorf(295			"internal error: computeSuiteAttributes error: attributes: suite=no %s compute=no %s)",296			suite.Provides.SerializeToNoSpec(),297			computedSuite.Provides.SerializeToNoSpec(),298		)299	}300	return nil301}302func computeSuiteAttributes(toolIDs []string, assumeKey bool) *Suite {303	newSuite := &Suite{304		Provides:      newEmptyRequirements(),305		SecurityLevel: 0,306	}307	// if we have a key308	if assumeKey {309		newSuite.Provides.Add(SenderAuthentication)310		newSuite.Provides.Add(RecipientAuthentication)311	}312	// check all security levels and collect attributes313	for _, toolID := range toolIDs {314		// ====================================315		// tool check loop: parse, prep and get316		// ====================================317		var hashTool *hashtools.HashTool318		// parse ID for args319		var arg string320		if strings.Contains(toolID, "(") {321			splitted := strings.Split(toolID, "(")322			toolID = splitted[0]323			arg = strings.Trim(splitted[1], "()")324		}325		// get tool326		tool, err := tools.Get(toolID)327		if err != nil {328			return nil329		}330		// create logic instance and add to logic and state lists331		logic := tool.Factory()332		// ===================================333		// tool check loop: collect attributes334		// ===================================335		switch tool.Info.Purpose {336		case tools.PurposePassDerivation:337			newSuite.Provides.Add(SenderAuthentication)338			newSuite.Provides.Add(RecipientAuthentication)339		case tools.PurposeKeyExchange:340			newSuite.Provides.Add(RecipientAuthentication)341		case tools.PurposeKeyEncapsulation:342			newSuite.Provides.Add(RecipientAuthentication)343		case tools.PurposeSigning:344			newSuite.Provides.Add(SenderAuthentication)345		case tools.PurposeIntegratedCipher:346			newSuite.Provides.Add(Confidentiality)347			newSuite.Provides.Add(Integrity)348		case tools.PurposeCipher:349			newSuite.Provides.Add(Confidentiality)350		case tools.PurposeMAC:351			newSuite.Provides.Add(Integrity)352		}353		// =============================================354		// tool check loop: process options, get hashers355		// =============================================356		for _, option := range tool.Info.Options {357			switch option {358			case tools.OptionNeedsManagedHasher,359				tools.OptionNeedsDedicatedHasher:360				hashTool, err = hashtools.Get(arg)361				if err != nil {362					return nil363				}364			}365		}366		// ================================367		// tool check loop: initialize tool368		// ================================369		// init tool370		logic.Init(371			tool,372			&Helper{373				info: tool.Info,374			},375			hashTool,376			nil,377		)378		// =======================================379		// tool check loop: compute security level380		// =======================================381		toolSecurityLevel, err := logic.SecurityLevel(nil)382		if err != nil {383			return nil384		}385		if newSuite.SecurityLevel == 0 || toolSecurityLevel < newSuite.SecurityLevel {386			newSuite.SecurityLevel = toolSecurityLevel387		}388	}389	return newSuite390}...

Full Screen

Full Screen

adder.go

Source:adder.go Github

copy

Full Screen

1package api2import (3  "context"4  "errors"5  "fmt"6  "github.com/xpwu/go-log/log"7  "net/http"8  "path"9  "reflect"10  "strings"11)12type base struct {13  newSuite     SuiteCreator14  method       reflect.Method15  requestType  reflect.Type16  responseType reflect.Type17}18func (base *base) Process(ctx context.Context, request *Request) (response *Response) {19  response = NewResponse(request)20  response.HttpStatus = http.StatusInternalServerError21  apiReq := reflect.New(base.requestType)22  var apiRes interface{} = &struct{}{}23  suite := base.newSuite()24  if suite.SetUp(ctx, request, apiReq.Interface()) {25    in := []reflect.Value{reflect.ValueOf(suite), reflect.ValueOf(ctx), apiReq}26    out := base.method.Func.Call(in)27    if len(out) != 1 {28      request.Terminate(errors.New("len(out) != 1, 不满足suite api 的输出要求,请检查代码"))29    }30    apiRes = out[0].Interface()31    response.HttpStatus = http.StatusOK32  }33  suite.TearDown(ctx, apiRes, response)34  return35}36// 参见suite的注释说明37const preAPI = "API"38func Add(newSuite SuiteCreator) {39  add(newSuite, Register)40}41func errStr(method, reason string) string {42  return fmt.Sprintf(43    "%s has %s prefix, but %s. NOT add this method to server",44    method, preAPI, reason)45}46func add(newSuite SuiteCreator, register func(uri string, api API)) {47  logger := log.NewLogger()48  suite := newSuite()49  typ := reflect.TypeOf(suite)50  logger.PushPrefix(fmt.Sprintf("add suite(name:%s) to server. ", typ.Elem().Name()))51  defer logger.PopPrefix()52  for i := 0; i < typ.NumMethod(); i++ {53    // Method must be exported.54    method := typ.Method(i)55    if method.PkgPath != "" {56      continue57    }58    mName := method.Name59    if !strings.HasPrefix(mName, preAPI) {60      continue61    }62    mName = mName[len(preAPI):]63    mType := method.Type64    // Method needs three ins: receiver, ctx, request.65    if mType.NumIn() != 3 {66      log.Warning(errStr(method.Name, "it does have two parameters"))67      continue68    }69    // first must implement Context70    argType := mType.In(1)71    if !argType.Implements(reflect.TypeOf((*context.Context)(nil)).Elem()) {72      log.Warning(errStr(method.Name, "the first parameter is not a context.Context"))73      continue74    }75    // second must be ptr76    reqType := mType.In(2)77    if reqType.Kind() != reflect.Ptr {78      log.Warning(errStr(method.Name, "the second parameter is not a pointer type"))79      continue80    }81    reqType = reqType.Elem()82    // return must be prt83    if mType.NumOut() != 1 {84      log.Warning(errStr(method.Name, "it does not have one return value"))85      continue86    }87    returnType := mType.Out(0)88    if returnType.Kind() != reflect.Ptr {89      log.Warning(errStr(method.Name, "the return parameter is not a pointer type"))90      continue91    }92    returnType = returnType.Elem()93    b := &base{newSuite: newSuite, method: method,94      requestType: reqType, responseType: returnType}95    // 加入'/', 表示不需要带上host一起匹配。参见 net/http/server 中对host的说明96    register(path.Join("/", suite.MappingPreUri(), mName), b)97    // 大小写都加入98    if 'A' <= mName[0] && mName[0] <= 'Z' {99      register(path.Join("/", suite.MappingPreUri(), strings.ToLower(mName[0:1])+mName[1:]), b)100    }101  }102}...

Full Screen

Full Screen

globals_test.go

Source:globals_test.go Github

copy

Full Screen

1package globals_test2import (3	"testing"4	"github.com/onsi/ginkgo/extensions/globals"5	"github.com/onsi/ginkgo/internal/global"6)7func TestGlobals(t *testing.T) {8	global.InitializeGlobals()9	oldSuite := global.Suite10	if oldSuite == nil {11		t.Error("global.Suite was nil")12	}13	globals.Reset()14	newSuite := global.Suite15	if newSuite == nil {16		t.Error("new global.Suite was nil")17	}18	if oldSuite == newSuite {19		t.Error("got the same suite but expected it to be different!")20	}21}...

Full Screen

Full Screen

NewSuite

Using AI Code Generation

copy

Full Screen

1func main() {2    suite := internal.NewSuite()3    suite.Test()4}5func main() {6    suite := internal.NewSuite()7    suite.Test()8}9func main() {10    suite := internal.NewSuite()11    suite.Test()12}13func main() {14    suite := internal.NewSuite()15    suite.Test()16}17func main() {18    suite := internal.NewSuite()19    suite.Test()20}21func main() {22    suite := internal.NewSuite()23    suite.Test()24}25func main() {26    suite := internal.NewSuite()27    suite.Test()28}29func main() {30    suite := internal.NewSuite()31    suite.Test()32}33func main() {34    suite := internal.NewSuite()35    suite.Test()36}37func main() {38    suite := internal.NewSuite()39    suite.Test()40}41func main() {42    suite := internal.NewSuite()43    suite.Test()44}45func main() {46    suite := internal.NewSuite()47    suite.Test()48}49func main() {50    suite := internal.NewSuite()51    suite.Test()52}53func main() {54    suite := internal.NewSuite()55    suite.Test()56}57func main() {58    suite := internal.NewSuite()59    suite.Test()60}

Full Screen

Full Screen

NewSuite

Using AI Code Generation

copy

Full Screen

1import (2func TestGinkgo(t *testing.T) {3    gomega.RegisterFailHandler(ginkgo.Fail)4    ginkgo.RunSpecs(t, "Ginkgo Suite")5}6import (7func TestGinkgo(t *testing.T) {8    gomega.RegisterFailHandler(ginkgo.Fail)9    ginkgo.RunSpecs(t, "Ginkgo Suite")10}11import (12func TestGinkgo(t *testing.T) {13    gomega.RegisterFailHandler(ginkgo.Fail)14    ginkgo.RunSpecs(t, "Ginkgo Suite")15}16import (17func TestGinkgo(t *testing.T) {18    gomega.RegisterFailHandler(ginkgo.Fail)19    ginkgo.RunSpecs(t, "Ginkgo Suite")20}21import (22func TestGinkgo(t *testing.T) {23    gomega.RegisterFailHandler(ginkgo.Fail)24    ginkgo.RunSpecs(t, "Ginkgo Suite")25}26import (27func TestGinkgo(t *testing.T) {28    gomega.RegisterFailHandler(ginkgo.Fail)29    ginkgo.RunSpecs(t, "

Full Screen

Full Screen

NewSuite

Using AI Code Generation

copy

Full Screen

1func NewSuite() *Suite {2   return new(Suite)3}4func NewSuite() *Suite {5   return new(Suite)6}7func NewSuite() *Suite {8   return new(Suite)9}10func NewSuite() *Suite {11   return new(Suite)12}13func NewSuite() *Suite {14   return new(Suite)15}16func NewSuite() *Suite {17   return new(Suite)18}19func NewSuite() *Suite {20   return new(Suite)21}22func NewSuite() *Suite {23   return new(Suite)24}25func NewSuite() *Suite {26   return new(Suite)27}28func NewSuite() *Suite {29   return new(Suite)30}31func NewSuite() *Suite {32   return new(Suite)33}34func NewSuite() *Suite {35   return new(Suite)36}37func NewSuite() *Suite {38   return new(Suite)39}40func NewSuite() *Suite {41   return new(Suite)42}43func NewSuite() *Suite {44   return new(Suite)45}46func NewSuite() *Suite {47   return new(Suite)48}

Full Screen

Full Screen

NewSuite

Using AI Code Generation

copy

Full Screen

1func main() {2    s := internal.NewSuite("test")3    s.Run()4}5type Suite struct {6}7func NewSuite(name string) *Suite {8    return &Suite{name}9}10func (s *Suite) Run() {11    println("Running suite", s.Name)12}13type Suite struct {14}15func NewSuite(name string) *Suite {16    return &Suite{name}17}18func (s *Suite) Run() {19    println("Running suite", s.Name)20}

Full Screen

Full Screen

NewSuite

Using AI Code Generation

copy

Full Screen

1import (2func main() {3	fmt.Println(test2.NewSuite())4}5import (6func NewSuite() string {7	fmt.Println("I am in test2")8}9import (10func NewSuite() string {11	fmt.Println("I am in test3")12	return test2.NewSuite()13}14import (15func NewSuite() string {16	fmt.Println("I am in test4")17	return test3.NewSuite()18}19import (20func NewSuite() string {21	fmt.Println("I am in test5")22	return test4.NewSuite()23}24import (25func main() {26	fmt.Println(test5.NewSuite())27}

Full Screen

Full Screen

NewSuite

Using AI Code Generation

copy

Full Screen

1import (2func main() {3	s := internal.NewSuite()4	fmt.Println(s)5}6type Suite struct {7}8func NewSuite() *Suite {9	return &Suite{}10}11import (12func TestNewSuite(t *testing.T) {13	s := NewSuite()14	fmt.Println(s)15}

Full Screen

Full Screen

NewSuite

Using AI Code Generation

copy

Full Screen

1import (2func main() {3	fmt.Println("Hello World!")4	s := internal.NewSuite()5	s.Add("hello")6	s.Add("world")7	s.Add("!")8	fmt.Println(s)9}10type Suite struct {11}12func NewSuite() *Suite {13	return &Suite{words: make([]string, 0)}14}15func (s *Suite) Add(word string) {16	s.words = append(s.words, word)17}18func (s *Suite) String() string {19	return "Suite: " + strings.Join(s.words, " ")20}

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Ginkgo automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful