Skip to content

Commit

Permalink
fuzz-marshal-float-64ptr
Browse files Browse the repository at this point in the history
  • Loading branch information
OleksiienkoMykyta committed Jun 10, 2024
1 parent 34fdeeb commit f08ef38
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 35 deletions.
88 changes: 87 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,92 @@ jobs:
- run: go vet
- name: Run unit tests
run: go test -v -tags unit -race
Fuzz:
timeout-minutes: 15
needs:
- build
name: Fuzz tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
go: [ '1.19', '1.20' ]
cassandra_version: [ '4.0.8', '4.1.1' ]
auth: [ "false" ]
compressor: [ "snappy" ]
tags: [ "cassandra", "integration", "ccm", "fuzz" ]
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go }}
- uses: actions/cache@v2
id: gomod-cache
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('go.mod') }}
restore-keys: |
${{ runner.os }}-go-
- name: Install CCM
run: pip install "git+https://github.com/riptano/ccm.git@${CCM_VERSION}"
- name: Start cassandra nodes
run: |
VERSION=${{ matrix.cassandra_version }}
keypath="$(pwd)/testdata/pki"
conf=(
"client_encryption_options.enabled: true"
"client_encryption_options.keystore: $keypath/.keystore"
"client_encryption_options.keystore_password: cassandra"
"client_encryption_options.require_client_auth: true"
"client_encryption_options.truststore: $keypath/.truststore"
"client_encryption_options.truststore_password: cassandra"
"concurrent_reads: 2"
"concurrent_writes: 2"
"write_request_timeout_in_ms: 5000"
"read_request_timeout_in_ms: 5000"
)
if [[ $VERSION == 3.*.* ]]; then
conf+=(
"rpc_server_type: sync"
"rpc_min_threads: 2"
"rpc_max_threads: 2"
"enable_user_defined_functions: true"
"enable_materialized_views: true"
)
elif [[ $VERSION == 4.0.* ]]; then
conf+=(
"enable_user_defined_functions: true"
"enable_materialized_views: true"
)
else
conf+=(
"user_defined_functions_enabled: true"
"materialized_views_enabled: true"
)
fi
ccm remove test || true
ccm create test -v $VERSION -n 3 -d --vnodes --jvm_arg="-Xmx256m -XX:NewSize=100m"
ccm updateconf "${conf[@]}"
export JVM_EXTRA_OPTS=" -Dcassandra.test.fail_writes_ks=test -Dcassandra.custom_query_handler_class=org.apache.cassandra.cql3.CustomPayloadMirroringQueryHandler"
ccm start --wait-for-binary-proto --verbose
ccm status
ccm node1 nodetool status
args="-gocql.timeout=60s -runssl -proto=4 -rf=3 -clusterSize=3 -autowait=2000ms -compressor=${{ matrix.compressor }} -gocql.cversion=$VERSION -cluster=$(ccm liveset) ./..."
echo "args=$args" >> $GITHUB_ENV
echo "JVM_EXTRA_OPTS=$JVM_EXTRA_OPTS" >> $GITHUB_ENV
- name: Run Fuzz tests
run: |
export JVM_EXTRA_OPTS="${{env.JVM_EXTRA_OPTS}}"
# go test -race -v -fuzz Fuzz -fuzztime 30s -parallel=1 -tags fuzz
go test -v -tags "${{ matrix.tags }} gocql_debug" -fuzz Fuzz -fuzztime 30s -parallel=1 -timeout=5m -race ${{ env.args }}

integration-cassandra:
timeout-minutes: 15
needs:
Expand Down Expand Up @@ -198,4 +284,4 @@ jobs:
- name: Integration tests
run: |
export JVM_EXTRA_OPTS="${{env.JVM_EXTRA_OPTS}}"
go test -v -run=TestAuthentication -tags "${{ matrix.tags }} gocql_debug" -timeout=15s -runauth ${{ env.args }}
go test -v -run=TestAuthentication -tags "${{ matrix.tags }} gocql_debug" -timeout=15s -runauth ${{ env.args }}
3 changes: 3 additions & 0 deletions frame.go
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,9 @@ func readHeader(r io.Reader, p []byte) (head frameHeader, err error) {

version := p[0] & protoVersionMask

fmt.Println("LOL")
fmt.Printf("\nDecimal:%d. Binary:%b. Version:%v\n", p[0], p[0], version)

if version < protoVersion1 || version > protoVersion5 {
return frameHeader{}, fmt.Errorf("gocql: unsupported protocol response version: %d", version)
}
Expand Down
34 changes: 0 additions & 34 deletions fuzz.go

This file was deleted.

31 changes: 31 additions & 0 deletions fuzz_cassandra_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//go:build fuzz
// +build fuzz

package gocql

import (
"testing"
)

// FuzzMarshalFloat64Ptr aimed to repeatedly test float64 marshaling with generated inputs based on seed corpus.
func FuzzMarshalFloat64Ptr(f *testing.F) {
f.Add(float64(7500), float64(7500.00))

f.Fuzz(func(t *testing.T, num, numWithPoints float64) {
session := createSession(t)

defer session.Close()

if err := createTable(session, "CREATE TABLE IF NOT EXISTS gocql_test.float_test (id double, test double, primary key (id))"); err != nil {
t.Fatal("create table:", err)
}

if err := session.Query(`TRUNCATE TABLE gocql_test.float_test`).Exec(); err != nil {
t.Fatal("truncate table:", err)
}

if err := session.Query(`INSERT INTO float_test (id,test) VALUES (?,?)`, numWithPoints, &num).Exec(); err != nil {
t.Fatal("insert float64:", err)
}
})
}

0 comments on commit f08ef38

Please sign in to comment.