You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: acra-censor_test.go
    path of file: ./repos/acra/acra-censor
    
    the code of the file until where you have to start completion: /*
Copyright 2018, Cossack Labs Limited

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
    
func TestDenyValuePattern(t *testing.T) {
	var err error

	censor := NewAcraCensor()
	defer censor.ReleaseAll()
	blacklist := handlers.NewDenyHandler(sqlparser.New(sqlparser.ModeStrict))
	censor.AddHandler(blacklist)

	blacklistPattern := "SELECT a, b from t where ID = %%VALUE%%"
	err = blacklist.AddPatterns([]string{blacklistPattern})
	if err != nil {
		t.Fatal(err)
	}

	acceptableQueries := []string{
		"SELECT a, b FROM t WHERE someParameter = 'someValue208934278935789'",
		"SELECT a, b, c FROM y WHERE a = 'someValue'",
		"SELECT a, b FROM z WHERE a = 'someValue'",
		"SELECT a, b FROM t WHERE NonID = 'someValue'",
		"SELECT a, b, c, d FROM t WHERE a = 1 OR b = 1.0 OR c = TRUE OR d = NULL",
		"SELECT a, b FROM t WHERE a = 1 and b = 2.0",
	}
	blockableQueries := []string{
		"SELECT a, b FROM t WHERE ID = 'someValue_testValue_1234567890'",
		"SELECT a, b FROM t WHERE ID = 'someValue'",
	}
	for _, query := range acceptableQueries {
		err = censor.HandleQuery(query)
		if err != nil {
			t.Fatal(err, "Blacklist pattern blocked query. \nPattern:", blacklistPattern, "\nQuery:", query)
		}
	}
	for _, query := range blockableQueries {
		err = censor.HandleQuery(query)
		if err != common.ErrDenyByPatternError {
			t.Fatal(err, "Blacklist pattern passed query. \nPattern:", blacklistPattern, "\nQuery:", query)
		}
	}

	blacklist.Reset()
	blacklistPattern = "SELECT * from t where ID = %%VALUE%%"
	err = blacklist.AddPatterns([]string{blacklistPattern})
	if err != nil {
		t.Fatal(err)
	}

	blockableQueries = []string{
		"SELECT a, b FROM t WHERE ID = 1",
		"SELECT a, b FROM t WHERE ID = 1.0",
		"SELECT a, b, c, d FROM t WHERE ID = 'someValue'",
		"SELECT a, b, c FROM t WHERE ID = TRUE",
	}

	for _, query := range acceptableQueries {
		err = censor.HandleQuery(query)
		if err != nil {
			t.Fatal(err, "Blacklist pattern blocked query. \nPattern:", blacklistPattern, "\nQuery:", query)
		}
	}
	for _, query := range blockableQueries {
		err = censor.HandleQuery(query)
		if err != common.ErrDenyByPatternError {
			t.Fatal(err, "Blacklist pattern passed query. \nPattern:", blacklistPattern, "\nQuery:", query)
		}
	}

	// test limit
	blacklist.Reset()
	blacklistPattern = "SELECT * from t where ID > 10 LIMIT %%VALUE%%"
	err = blacklist.AddPatterns([]string{blacklistPattern})
	if err != nil {
		t.Fatal(err)
	}
	acceptableQueries = []string{
		// OFFSET presents
		"SELECT * from t where ID > 10 LIMIT 100 OFFSET 100",
		// no LIMIT expression
		"SELECT * from t where ID > 10",
		// wrong table
		"SELECT * from t1 where ID > 10 LIMIT 100",
		// wrong WHERE clause
		"SELECT * from t where ID < 10 LIMIT 100",
		// wrong columns
		//"SELECT a,b from t where ID > 10 LIMIT 100",
	}

	blockableQueries = []string{
		"SELECT * from t where ID > 10 LIMIT 100500",
	}

	for _, query := range acceptableQueries {
		err = censor.HandleQuery(query)
		if err != nil {
			t.Fatal(err, "Blacklist pattern blocked query. \nPattern:", blacklistPattern, "\nQuery:", query)
		}
	}
	for _, query := range blockableQueries {
		err = censor.HandleQuery(query)
		if err != common.ErrDenyByPatternError {
			t.Fatal(err, "Blacklist pattern passed query. \nPattern:", blacklistPattern, "\nQuery:", query)
		}
	}
}